打印路径与tar的路径不匹配

时间:2014-01-18 21:07:26

标签: python

我提供了一个需要备份的文件列表,这些文件需要备份在与它们相同的函数中。

该列表是两个包含校验和的文本文件的比较结果。

如何制作文件:

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

1 个答案:

答案 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)}

如果始终使用问题中显示的代码创建文件,那应该可以正常工作。如果最终你可能会读取在其他地方创建的文件,那么你应该是安全的,并且在将行放入集合之前删除换行符。这样可以避免文件没有最终换行符的潜在问题。