如何用Python在下一行写入?

0 投票
4 回答
4045 浏览
提问于 2025-04-16 23:19

我有一串数字: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()

这样做可以处理每行中任意数量的分号。

撰写回答