打印路径与给定路径不匹配

2024-06-25 23:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我提供了一个需要备份的文件列表,并在一个函数中对它们进行了tar处理

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

文件的制作方法:

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)

打油时出现以下错误:

[Errno 2] No such file or directory: '/XXX/XXX/XXXX/XXXX/Trash/files/hihi\n'

注意文件名中的'\n

如果在涂焦油之前打印路径,则没有'\n的痕迹

/XXX/XXX/XXXX/XXXX/Trash/files/hihi

有人知道为什么会发生这种情况或者如何解决吗? 也许我应该使用流编写器而不是依赖于\n


Tags: 文件path列表aswithhashfilesopen
1条回答
网友
1楼 · 发布于 2024-06-25 23:51:34

使用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)}

如果文件总是使用问题中显示的代码创建的,那么这应该可以很好地工作。如果最终您可能会读取在其他地方创建的文件,那么在将行放入集合之前,您应该安全地去掉换行符。这将避免文件没有最后换行的潜在问题

相关问题 更多 >