猿问

关于Python中的文件io

我错误地输入了以下代码:


f = open('\TestFiles\'sample.txt', 'w')

f.write('I just wrote this line')

f.close()

我运行了这段代码,即使我错误地输入了上面的代码,它仍然是一个有效的代码,因为第二个反斜杠忽略了单引号,据我所知,我应该得到的是一个名为“\TestFiles”的 .txt 文件示例”在我的项目文件夹中。但是,当我导航到项目文件夹时,我在那里找不到文件。


但是,例如,如果我使用不同的文件名执行相同的操作。喜欢,


f = open('sample1.txt', 'w')

f.write('test')

f.close()

我发现在我的文件夹中创建了“sample.txt”文件。即使据我所知第一个代码是有效的,是否有原因导致文件没有被创建?


还有一种方法可以提及相对于我的项目文件夹的文件,而不是提及文件的绝对路径?(例如,我想在项目文件夹内名为“TestFiles”的文件夹中创建一个名为“sample.txt”的文件。因此,在不提及 TestFiles 文件夹的绝对路径的情况下,有没有办法提及 TestFiles 文件夹相对于打开文件时Python中的项目文件夹?)


我是Python的初学者,希望有人能帮助我。


POPMUISE
浏览 107回答 3
3回答

慕田峪7331174

您正在寻找的是相对路径,长话短说,如果您想在项目文件夹内的“TestFiles”文件夹中创建一个名为“sample.txt”的文件,您可以执行以下操作:import osf = open(os.path.join('TestFiles', 'sample1.txt'), 'w')f.write('test')f.close()或者使用更新的pathlib模块:from pathlib import Pathf = open(Path('TestFiles', 'sample1.txt'), 'w')f.write('test')f.close()但您需要记住,这取决于您启动 Python 解释器的位置(这可能就是您无法在项目文件夹中找到“\TestFiles'sample”的原因,它是在其他地方创建的),以确保一切正常好吧,你可以这样做:from pathlib import Pathsample_path = Path(Path(__file__).parent, 'TestFiles', 'sample1.txt')with open(sample_path, "w") as f:    f.write('test')通过使用[上下文管理器]{https://book.pythontips.com/en/latest/context_managers.html},您可以避免使用f.close()

至尊宝的传说

创建文件时,您可以指定绝对文件名或相对文件名。如果文件路径以“\”(在 Win 上)或“/”开头,则它将是绝对路径。因此,在第一种情况下,您指定了绝对路径,实际上是:from pathlib import PathPath('\Testfile\'sample.txt').absolute()WindowsPath("C:/Testfile'sample.txt")每当你在 python 中运行一些代码时,将生成的相对路径将由你当前的文件夹组成,该文件夹是你启动 python 解释器的文件夹,你可以通过以下方式检查:import osos.getcwd()以及您之后添加的相对路径,因此如果您指定:Path('Testfiles\sample.txt').absolute()WindowsPath('C:/Users/user/Testfiles/sample.txt')一般来说,我建议您使用pathlib来处理路径。这使得它更安全并且跨平台。例如,假设您的凭证位于:project  src    script.py  testfiles并且您想要存储/读取文件project/testfiles。script.py您可以做的是获取with的路径__file__并构建到的路径project/testfilesfrom pathlib import Pathsrc_path = Path(__file__)testfiles_path = src_path.parent / 'testfiles'sample_fname = testfiles_path / 'sample.txt'with sample_fname.open('w') as f:    f.write('yo')

尚方宝剑之说

当我在 vscode 中运行第一个代码示例时,我收到一条警告 Anomalous backslash in string: '\T'. String constant might be missing an r prefix. ,当我运行该文件时,它还会创建一个名为\TestFiles'sample.txt. 它是在.py文件所在的同一目录中创建的。现在,如果你的工作树是这样的:project_folder     -testfiles         -sample.txt     -something.py那么你可以说:open("testfiles//hello.txt")我希望你觉得这对你有帮助。
随时随地看视频慕课网APP

相关分类

Python
我要回答