繁体   English   中英

Python中的语句被忽略

[英]With statement being ignored in Python

我有两个功能。 第一个创建一个新的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和程序设计的新手,因此,如果有一种更好的通用方法,我会不胜枚举。

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

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

我建议您对代码进行一些重组,以避免类似的陷阱。 一些建议:

  • 如果您可以将整个文件放入内存,则将ynabfile所有内容ynabfile到另一个列表中
  • 具有create_fileappend采用输入和输出文件名的参数
  • 或者,让这两个函数采用文件指针(在这种情况下为ynabfile ),并确保将其寻找到开头,然后使用该csv.reader创建一个新的csv.reader实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM