我有两个功能。第一个创建一个新的CSV文件(来自现有的CSV)。第二个将相同的数据附加到新CSV,但行的顺序略有不同。
当我在一个文件中一起运行时,第一个函数可以工作但第二个函数不能。但是,当我尝试将第二个函数放在一个单独的文件中,然后在第一个脚本中调用它时,它确实有效,尽管我必须输入两次输入。
我需要更改什么才能使第二个功能正常运行?
import csv
export = raw_input('>')
new_file = raw_input('>')
ynabfile = open(export, 'rb')
reader = csv.reader(ynabfile)
def create_file():
with open(new_file, 'wb') as result:
writer = csv.writer(result)
for r in reader:
writer.writerow((r[3], r[5], r[6],r[7], r[7],
r[8],r[8],r[9],r[10]))
def append():
with open(new_file, 'ab') as result2:
writer2 = csv.writer(result2)
for i in reader:
writer.writerow((r[3], r[5], r[6], r[7], r[7],
r[8], r[8], r[10], r[9]))
create_file()
append()
我是Python和编程的新手,所以如果有更好的方法可以做到这一点,我全心全意。
答案 0 :(得分:1)
csv阅读器已经阅读了ynabfile
指向的整个文件,因此,对create_file
或append
的第二次通话(或任何后续通话)将无法使用阅读器获取更多数据,直到文件指针被发送回开头。在你的情况下,快速解决这个问题:
create_file()
ynabfile.seek(0)
append()
我建议稍微重构你的代码,以避免像这样的陷阱。一些建议:
ynabfile
中的所有内容改为另一个列表create_file
和append
获取输入和输出文件名参数ynabfile
),并确保它被搜索到开头,然后使用它创建一个新的csv.reader
实例。