在Python中忽略语句

时间:2014-03-12 04:40:35

标签: python csv

我有两个功能。第一个创建一个新的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和编程的新手,所以如果有更好的方法可以做到这一点,我全心全意。

1 个答案:

答案 0 :(得分:1)

csv阅读器已经阅读了ynabfile指向的整个文件,因此,对create_fileappend的第二次通话(或任何后续通话)将无法使用阅读器获取更多数据,直到文件指针被发送回开头。在你的情况下,快速解决这个问题:

create_file()
ynabfile.seek(0)
append()

我建议稍微重构你的代码,以避免像这样的陷阱。一些建议:

  • 如果您可以将整个文件整合到内存中,请将ynabfile中的所有内容改为另一个列表
  • create_fileappend获取输入和输出文件名参数
  • 或者,让这两个函数接受文件指针(在这种情况下为ynabfile),并确保它被搜索到开头,然后使用它创建一个新的csv.reader实例。