我在文本文件中有多行文本,看起来与此类似:
2012-03-16 13:47:30.465 -0400 START Running Lab.script 19 on_the
我希望能够将此文本文件转换为csv。我已经使用此代码完成了这项工作:
fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
fout.write(','.join(row) + '\n')
但是现在,我的问题是我需要能够在行的这一部分的空格后添加“,”:
2012-03-16 13:47:30.465 -0400
我不知道怎么做,我尝试使用split()来拆分当前的行/位置,但它不起作用。任何建议都会非常有用。
谢谢
答案 0 :(得分:4)
有帮助的是,只是从一开始就标签分隔所有内容?如果是这样,您可以参考此answer,基本上是
这个用例确实有一个特例快捷方式!
如果你在没有参数的情况下调用str.split,它会在运行时分割 空格而不是单个字符。所以:
>>> ' '.join("Please \n don't \t hurt \x0b me.".split()) "Please don't hurt me."
所以对你来说就是
newLogFile = open('newLogFile.csv', 'w')
textFile = open('LogFile.txt', 'rb')
for row in textFile:
newLogFile.write('\t'.join(row.split()))
你也说过
但是现在,我的问题是我需要能够在之后添加“,” 这一部分的空格:
2012-03-16 13:47:30.465 -0400
对我来说听起来像你想要的
2012-03-16 ,13:47:30.465 ,-0400
答案 1 :(得分:2)
尝试以下方法:
fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
row[0] = ','.join(row[0].split())
fout.write(','.join(row) + '\n')
在csv.reader()
['2012-03-16 13:47:30.465 -0400', 'START', 'Running', 'Lab.script', '19 ', 'on_the']
然后更改第一个元素,使其看起来像这样:
['2012-03-16,13:47:30.465,-0400', 'START', 'Running', 'Lab.script', '19 ', 'on_the']
在行上','.join()
之后,您将获得将写入输出文件的行:
'2012-03-16,13:47:30.465,-0400,START,Running,Lab.script,19,on_the'
如果其他元素中可能包含空格,并且您希望将它们全部视为输出csv中的分隔符,则可以执行以下操作:
fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
fout.write(','.join(','.join(item.split()) for item in row) + '\n')