【问题标题】:my output CSV file is not copying the data我的输出 CSV 文件没有复制数据
【发布时间】:2017-08-23 17:14:51
【问题描述】:

我正在比较 2 个 CSV 文件,一个已经存在,另一个是通过运行这段代码生成的。基本上,它应该通过最新的工作表并查看是否添加了新行(仅限 A 列)并制作一个差异文件并将新添加的行从最新文件复制到差异文件。她是我正在使用的代码:

import os, csv, time, glob

timestr = time.strftime("%Y%m%d-%H%M%S")

f=open("B:/Test_folder/parse_file1_"+timestr+'.csv', 'w+', newline='' )
w=csv.writer(f)
for dirs in os.listdir("B:/folder1"):
        w.writerow([dirs])

newest = max(glob.iglob('B:/Test_folder/parse_file1_*.csv'), key=os.path.getctime)
oldest = min(glob.iglob('B:/Test_folder/parse_file1_*.csv'), key=os.path.getctime)
with open(oldest, 'r') as t1, open(newest, 'r') as t2:
    fileone = t1.readlines()
    filetwo = t2.readlines()
with open('B:/Test_folder/file1_diff.csv', 'w') as outFile:
    for line in filetwo:
        if line not in fileone:
            outFile.write(line)
outFile.close()

最旧的文件(已经存在)= parse_file1_20170328_currentime

A
B
C

和 最新文件 = parse_file2_20170329_currentime

A
B
C
D

预期的输出应该是: file1_diff

D

我的问题是,即使它正在创建一个差异文件,它也不会将 D 复制到 CSV 文件中。 我这里的逻辑搞砸了,请帮忙

谢谢

【问题讨论】:

  • 请添加trace以确定oldestnewest的值是什么,如果他们的名字看起来不错,fileonefiletwo的值是什么,并分享如果问题仍然不明显,那就在这里。
  • 你为什么不在第一个文件打开时使用with?由于文件没有关闭,我怀疑数据没有正确刷新。
  • 另外,outFile.close() 毫无意义,因为在退出最后一个 with 块时,outFile 已经关闭。
  • 感谢大家的帮助,虽然您的建议很受赞赏,但问题在于代码的执行周期。它无法写入差异文件,因为线程仍在为写入目的保留最新文件。我把程序分成两部分。一个用于创建新文件(在遍历目录时),另一个代码将新文件与旧文件进行比较(上述代码成功完成后将调用这段代码)。这解决了问题。我知道这不是我能写的最干净的代码,但我仍然是 python 和学习的新手,

标签: python python-2.7 excel-2010 notepad++ python-3.4


【解决方案1】:

也许删除空格会有所帮助: 对于文件二中的行: 如果 line.strip() 不在 fileone 中: outFile.write(line.strip())

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多