为csv中的每一行创建新文件(迭代时出现问题)

2024-04-19 00:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试用python迭代csv文件中的每一行,并为每一行创建新的csv文件。因此,我的思维过程是打开文件,循环遍历每一行,并为每一行创建一个名为n_file.csv(其中“n”是迭代)的文件,下面是我的代码:

import csv
csvfile = open('sample.csv','rb')
csvFileArray = []


for row in csv.reader(csvfile, delimiter = '.'):

csvFileArray.append(row)
print(row)
n = 0
n += 1

file = open(str(n) + "_file.csv", 'w+')
file.write(str(row))

print(n)   # returns 1 every time

不幸的是,这不是正确的迭代(因为它只是创建一个名为1_file.csv的文件并每次覆盖它)。我怎样才能解决这个问题?你知道吗


Tags: 文件csvsamplecsvfile代码inimportfor
3条回答

每次都将n设置为0,因为在循环中声明了它。在for语句之前声明它。你知道吗

试试这个:

import csv
with open('sample.csv','rb') as csvfile:
    for i, row in enumerate(csv.reader(csvfile, delimiter = '.')):
        with open("{}_file.csv".format(i), "w") as file:
            file.write(str(row))
for row in csv.reader(csvfile, delimiter='.'):
    csvFileArray.append(row)
    print(row)

    n = 0   # << you do n=0 each loop!!
    n += 1

所以最好是

for idx, row in enumerate(csv.reader(csvfile, delimiter='.')):
    csvFileArray.append(row)
    print(row)

    file = open(str(idx) + "_file.csv", 'w+')  # enumerate do same as you want!
    file.write(str(row))

相关问题 更多 >