python os模块可以看到文件夹中的项目,但可以';不要修改它们
我正在尝试创建一个程序,该程序循环浏览.txt文件列表,并将其文件名和内容添加到字典中。程序正确地导航到文件夹,我甚至可以打印出文件夹中文件的名称。但是,当我尝试将文件名和内容添加到字典中时,我在控制台中遇到此错误python os模块可以看到文件夹中的项目,但可以';不要修改它们,python,file,text,operating-system,document,Python,File,Text,Operating System,Document,我正在尝试创建一个程序,该程序循环浏览.txt文件列表,并将其文件名和内容添加到字典中。程序正确地导航到文件夹,我甚至可以打印出文件夹中文件的名称。但是,当我尝试将文件名和内容添加到字典中时,我在控制台中遇到此错误 Traceback (most recent call last): File "test.py", line 33, in <module> user1.append_journal_files(location) File "test.py", lin
Traceback (most recent call last):
File "test.py", line 33, in <module>
user1.append_journal_files(location)
File "test.py", line 21, in append_journal_files
with open(filename, 'r') as file_object:
FileNotFoundError: [Errno 2] No such file or directory: 'dump.0001.txt'
filename
只是基本名称,如dump.0001.txt
如果要打开文件,则需要完整路径,如C:\Users\Christian Gentry\AppData\Local\Autodesk\Revit\Autodesk Revit 2018\Journals\dump0001.txt
。(也可以是当前工作目录的相对路径,但必须是指向文件的路径。)
你已经在为listdir
做这件事了——你不仅仅是在传递杂志,并期望它能起作用,这与这里的想法是一样的
最简单的修复方法是:
pathname = os.path.join(directory, filename)
with open(pathname, 'r') as file_object:
当我们这样做的时候:
- 您只跳过了Windows路径名中的一个反斜杠。从技术上讲,您所拥有的是正确的,因为所有其他路径组件碰巧都以无效反斜杠转义的字母开头,但这并不是一件值得信赖的事情。使用原始字符串文字、转义所有反斜杠或使用正斜杠
- 您不需要
fsencode
传递到listdir
的路径,也不需要fsdecode
对返回的结果进行解码。如果您只是传入一个字符串,Python将自动对其进行适当编码,并自动为您解码结果
- 考虑使用而不是
os
;对于新手来说,它更容易理解,它的帮助更容易导航,并且它使很多小事情出错变得更加困难。在3.6之前,它不适用于大量的stdlib,但您使用的是3.6,所以这无关紧要
打开文件时,您错过了路径的目录部分。嘿,非常感谢@abarnert!我没有意识到该路径必须连接到文件名。我必须对您的解决方案做的一个更改是,我必须输入pathname=os.path.join(目录,文件名),而不是pathname=os.path.join(目录,文件名)。这解决了我的问题!
pathname = os.path.join(directory, filename)
with open(pathname, 'r') as file_object: