Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSV文件到行列表?_Python_Csv - Fatal编程技术网

Python CSV文件到行列表?

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

我有一个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
        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