Python CSV文件到行列表?
我有一个txt文件,我想将每一行保存为新文件中的列表,新文件名为fname。但是输出没有被保存。我错过了什么Python CSV文件到行列表?,python,csv,Python,Csv,我有一个txt文件,我想将每一行保存为新文件中的列表,新文件名为fname。但是输出没有被保存。我错过了什么 import csv with open('file.txt', 'rU') as csvfile: reader = csv.reader(csvfile, delimiter='\t') i = 1 for line in reader: fname = line[0] + line[1] #print fname
import csv
with open('file.txt', 'rU') as csvfile:
reader = csv.reader(csvfile, delimiter='\t')
i = 1
for line in reader:
fname = line[0] + line[1]
#print fname
with open(fname, 'w') as out:
out.write(line)
i +=1
更改:
with open(fname, 'w') as out:
out.write(line)
致:
with open(fname, 'a') as out:
out.write(line)
w打开一个仅用于写入的文件覆盖文件(如果文件存在)。如果文件不存在,则创建一个新文件以进行写入
a打开一个文件进行附加。如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新的文件进行写入
更好的方法:
import csv
with open('file.txt', 'rU') as csvfile, open(fname, 'w') as out:
reader = csv.reader(csvfile, delimiter='\t')
i = 1
for line in reader:
fname = line[0] + line[1]
out.write(line)
您无法写入列表,因此将倒数第二行更改为
**out。写入(str(line))**
要做您想做的事情,您需要修复两件事,一件是在“append”模式下打开输出文件,这样它们以前的内容不会在每次写入其他内容时被删除 其次,您需要某种方法来了解文件读取的每个csv行的原始数据。当您使用像
csv
模块这样的扩展并且不知道内部结构(无论如何都不应该使用)时,这可能会很困难
在这种情况下,为了解决这个问题,您可以将自定义的csvfile
参数传递给csv.reader
,该参数将为您提供所需的信息。基本上是读取数据的一个小型预处理器。我的意思是:
import csv
def pre_reader(file):
"""Generator that remembers last line read."""
for line in file:
pre_reader.lastline = line
yield line
with open('test_gen.csv', 'rU') as csvfile:
reader = csv.reader(pre_reader(csvfile), delimiter='\t')
i = 1
for line in reader:
fname = line[0] + line[1]
#print fname
with open(fname, 'a') as out:
out.write(pre_reader.lastline)
i +=1
这不起作用,因为行将文件中的每一行拆分为一个列表。无法编写列表为什么要在循环中打开文件?感谢您的帮助和解释!不客气。还要注意的是,您不必使用
i=0
以及for
循环中的i+=1
手动计算读取的行数,只需使用:for i,line in enumerate(reader):
即可为您自动计算。
import csv
def pre_reader(file):
"""Generator that remembers last line read."""
for line in file:
pre_reader.lastline = line
yield line
with open('test_gen.csv', 'rU') as csvfile:
reader = csv.reader(pre_reader(csvfile), delimiter='\t')
i = 1
for line in reader:
fname = line[0] + line[1]
#print fname
with open(fname, 'a') as out:
out.write(pre_reader.lastline)
i +=1