如何用Python在下一行写入?
我有一串数字:1234 5678 9876 542 1231; 2333 1234 5678 579。
我想把这些数据从一个文本文件(murtuz.txt)写入一个CSV文件(myfile.csv),并且希望在分号后面的数据能从新的一行开始。
我试过下面的代码,它能把数据写入CSV文件,但我没能成功让分号后面的内容换行。
import csv
from StringIO import StringIO
import sys
data = open("murtuz.txt","r").read()
data1 = StringIO(data)
print data1
reader = csv.reader(data1, delimiter=' ',)
for row in reader:
print row
out = csv.writer(open("myfile.csv","w"), delimiter=',')
out.writerow(row)
sys.exit()
需要一些专家的帮助。
提前谢谢大家。
4 个回答
0
我会解析这一行。
newrow = str(row)
if ';' in newrow:
fragments = newrow.split(';')
for each_fragment in fragments:
out.writerow(each_fragment)
这样做可以吗?
3
csv.reader
可以接受任何可迭代的输入。特别是,你可以把生成器产生的行传给它。你可以用这个生成器来处理你的输入数据,比如说,可以用它来按分号分割数据:
input csv
input textwrap
input io
def splitter(iterable):
for line in iterable:
for part in line.split(';'):
yield part.strip()
f=open("murtuz.txt","r")
# with open("murtuz.txt","r") as f: # for Python 2.6 or better
csvobj=csv.reader(splitter(f),delimiter=' ')
for row in csvobj:
print(row)
f.close()
生成的结果是
['1234', '5678', '9876', '542', '1231']
['2333', '1234', '5678', '579']
['1234', '5678', '9876', '542', '1231']
['2333', '1234', '5678', '579']
一旦你掌握了读取器的用法,再把数据写回去就简单了。
0
根据文档,
读取器是固定的,只能识别'\r'或'\n'作为行结束符,其他的行结束符会被忽略。这个行为将来可能会改变。
所以你不能让读取器把分号当作行结束符来处理。
你可以这样做:
import csv
data = open("murtuz.txt").readlines()
outfile = open("myfile.csv","w")
out = csv.writer(outfile)
for row in data:
row = row.strip().split(';')
if row:
for subrow in row:
subrow = subrow.strip().split()
if subrow:
out.writerow(subrow)
outfile.close()
这样做可以处理每行中任意数量的分号。