【问题标题】:Python script to read a text file and write into a csv file用于读取文本文件并写入 csv 文件的 Python 脚本
【发布时间】:2014-04-01 18:56:21
【问题描述】:

我有一个文本文件,其中每一行都有多个单词(我想将其视为列)。现在我想从这个文本文件中读取所有数据并创建一个包含行和列的 csv 文件。我写到这里的代码 -

import csv
f=open("text.txt", "r")
reader=csv.reader(f)
offile=open("output.csv","wb")
writer=csv.writer(offile,delimiter='\t',quotechar='"',quoting=csv.QUOTE_ALL)
for row in reader:
 ........

f.close()
offile.close()

我无法理解如何在编写 csv 文件时将每一行划分为列并将这些列和行写回?我是python的新手,所以一个很好的例子我会非常感激。

谢谢

【问题讨论】:

  • 如果您希望有人能够为您提供的不仅仅是传递帮助,请发布一个链接到 test.txt

标签: python


【解决方案1】:

尝试通过正则表达式拆分行:

line = "Foo bar baz quux"
import re
pieces = re.split("\s+", line)
print pieces

这导致

['Foo', 'bar', 'baz', 'quux']

上面使用的正则表达式匹配多个 (+) 空白字符 (\s)

【讨论】:

  • 你知道不带参数的 split() 等价于 split("\s+") 但更快吗?
  • 你为什么要这样做而不是line.split() ??
  • 问题作者没有详细说明他们想要如何拆分,除了“将行分成列”。是的,有很多不同的方法可以用空格分割。我使用 re 模块专门用来提醒人们注意正则表达式的使用。这带来了以多种不同方式进行拆分的灵活性。这个问题的初学者性质让我相信我们不能想当然地认为他/她知道什么是正则表达式。
  • 输入文本文件在行中具有随机不同类型的数据,例如 - data1 data2 data3 data4 data5 data6 data7 我想要的只是将所有“数据”视为单行中的列并将其写为将一行写入 csv 文件。希望这有助于更多
  • @user3486471 你是说它有奇怪的分隔符分隔字段吗?你知道它们是什么吗?这个列数据是说前 10 列是一个字段吗?对于后续问题,您可能需要粘贴您尝试处理的数据样本。
【解决方案2】:
import re
data = open("test.txt").read()
lines_of_data = data.splitlines()
writer=csv.writer(offile,delimiter='\t',quotechar='"',quoting=csv.QUOTE_ALL)
writer.writerows(map(lambda line:re.split("\s\s\s\s+",line.strip()),lines_of_data))

【讨论】:

  • 对不起我的无知 - 但我如何获得这个“数据”。我只有一个输入文本文件'f'和一个输出csv文件'ofile'?
  • data 是 f.read() 的一个例子,因为你从来没有向我们展示过你的输入文件是什么样的,我假设它的内容看起来像我的data 变量
  • 请发布整个文本文件或至少几行
  • 是的,如果你能提供一个链接(下载)会更好......我认为 pastebin 正在将你的空白规范化为普通空格(我假设分隔符是制表符)
  • 链接正确显示了我的行。这里的问题是分隔符不是正确的制表符,每个字段都通过普通空格与其前一个字段分隔。
【解决方案3】:
data = open('test.txt').read()
lines_of_data = data.splitlines()
tmp = []
for i in range(len(lines_of_data)):
    tmp.append(lines_of_data[i].split())    
data_df = pd.DataFrame(tmp) 
data_df.to_csv('test.csv')

【讨论】:

  • 欢迎来到 Stack Overflow!不鼓励仅使用代码的答案。请单击编辑并添加一两段来总结您的代码如何解决问题,或者解释您的答案与之前的答案/答案有何不同。谢谢。
猜你喜欢
  • 2020-04-23
  • 2017-10-03
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多