【问题标题】:python: import flat text file without delimiterspython:导入不带分隔符的纯文本文件
【发布时间】:2018-12-06 01:41:25
【问题描述】:

我想将一个从某个数据库中提取的文本文件导入 Python。它是一种纯文本格式,没有行尾分隔符(但我知道应该有固定数量的列)。 每个新行都用一个递增的 id 标识(在下面的示例中,"0001""0002""0003")。

我尝试了不同的方法,最终是这个:

with open('url.txt', "rb") as f:
    df = f.read().decode(errors="replace")

但这给了我一个巨大的字符串……然后我尝试了一些正则表达式,用一个循环在 Id 上拆分,然后在 "," 上进行子拆分,问题是有时丢失的数据编码为 \N 没有引号,它永远不会每行返回相同数量的列。数据样本:

"0001","2015-01-01","doc","eab4e80fec7352a7","https://www.paypal.com/us","setRequestHeader(\"Content-Type\")","0002","2015-01-02","doc","0",\N,\N,"0003",etc.

预期的输出应该是带有以下列的 pandas 数据框:id、date、doctype、hash、url、code。 知道我该怎么做吗?

【问题讨论】:

  • 您能否提供文件在文件编辑器中打开后的截图?
  • 你试过df.split(',')吗?然后你只需要避免 '\\N' 值,但你有正确的列数。
  • @dexter 谢谢。由于机密性,我认为我不能,但在文本编辑器中,它的开始就像我的示例一样......
  • “避免使用 \\N 值”是什么意思?
  • 类似的东西:df = df.replace('\\N', '""')

标签: python regex text import


【解决方案1】:

要获取数据框,您可以执行以下操作:

with open('testfloat', "rb") as f:
    df = f.read().decode(errors="replace")
df = df.replace('\\N', '""')  # Replace \N by empty strings
df = df[1:-1]  # remove first and last "
df_list = df.split('","')  # Splitting values

array = [df_list[i:i+6] for i in range(0, len(df_list), 6)]  # Extract the lines

df = pd.DataFrame(array)

【讨论】:

  • 好的,所以我什至不需要先用Id 分割,对吧?
  • 确实如此,因为您始终拥有固定数量的列。
  • &很高兴得到一位前“BJ-men”的帮助 ;-) 也去过那里!
  • 我也很高兴哈哈! ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多