我提供了一个需要备份的文件列表,这些文件需要备份在与它们相同的函数中。
该列表是两个包含校验和的文本文件的比较结果。
如何制作文件:
hash = hashlib.md5(path + '/' + file).hexdigest()
f.write('{} - {}'.format(hash, path + '/' + file) + '\n')
如何比较:
with open(tmpfile, 'r') as f1:
with open(storagefile, 'r') as f2:
diff = set(f1).difference(f2)
tarring时出现以下错误:
[Errno 2] No such file or directory: '/XXX/XXX/XXXX/XXXX/Trash/files/hihi\n'
注意文件名中的'
和\n
如果我在tar之前打印路径,则无法跟踪'
和\n
/ XXX / XXX / XXXX / XXXX /垃圾桶/文件/日冰
有人知道为什么会发生这种情况或如何解决这个问题?
也许我应该使用流编写器而不必依赖\n
答案 0 :(得分:2)
当使用set(f1)
读取文件时,从文件读取的行包括换行符(类似于f1.readlines())。
例如:
[5]: !cat foo.txt
foo
bar
baz
In [6]: with open('foo.txt', 'r') as f:
...: s = set(f)
...:
In [7]: s
Out[7]: {'bar\n', 'baz\n', 'foo\n'}
有很多方法可以解决这个问题。例如,使用:
diff = {name.rstrip('\n') for name in set(f1).difference(f2)}
如果始终使用问题中显示的代码创建文件,那应该可以正常工作。如果最终你可能会读取在其他地方创建的文件,那么你应该是安全的,并且在将行放入集合之前删除换行符。这样可以避免文件没有最终换行符的潜在问题。