tempfile对象跳过for循环中的行

时间:2017-09-11 21:20:42

标签: python-2.7 temporary-files

我从csv文件中读取数据,对每一行执行一些规范化,然后将其写入临时文件。临时文件对象在main()函数中创建,因为一个文件中的代码写入它,另一个文件中的代码从中读取。这是为了避免将大文件导入内存。

但是,以下脚本仅将一部分行写入文件。当我用temp_file.write(row)语句替换print时,所有行都打印到stdout。

有人可以帮助我理解为什么print会返回所有行,但只会将一个子集写入临时文件。

更新:我在normalize()方法中添加了main()方法,结果正确无误。我怀疑这个问题与将tempfile对象名称传递给另一个python文件并从该文件写入它有关。

主要方法

def main():

    [argparse code here - removed for brevity]

    temp_file = NamedTemporaryFile()

    if os.path.isfile(args.input_file):
        normalize.normalize_file(args.input_file, temp_file)
    else:
        print 'Please supply a valid source file'   

    if __name__ == '__main__':
        main()

从其他文件导入的方法

def normalize_file(csv_file, temp_file):

    with open(csv_file) as file:
        reader = csv.reader(file)
        for line in file:
            row = line.lower()
            matchStr = re.search(r'\\users\\\w+\\',row, re.I)
            if matchStr:
                row = row.replace(matchStr.group(), '\\users\\usr\\')
            matchStr = re.search(r'\w:\\',row, re.I)
            if matchStr:
                row = row.replace(matchStr.group(), '\\')
            temp_file.write(row)
            #if I put print here all rows are printed out correctly

0 个答案:

没有答案