我从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