为了账号安全,请及时绑定邮箱和手机立即绑定

关于Python中的文件io

关于Python中的文件io

POPMUISE 2023-10-18 21:15:55
我错误地输入了以下代码: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的初学者,希望有人能帮助我。
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您正在寻找的是相对路径,长话短说,如果您想在项目文件夹内的“TestFiles”文件夹中创建一个名为“sample.txt”的文件,您可以执行以下操作:

import os


f = open(os.path.join('TestFiles', 'sample1.txt'), 'w')

f.write('test')

f.close()

或者使用更新的pathlib模块:


from pathlib import Path


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

f.write('test')

f.close()

但您需要记住,这取决于您启动 Python 解释器的位置(这可能就是您无法在项目文件夹中找到“\TestFiles'sample”的原因,它是在其他地方创建的),以确保一切正常好吧,你可以这样做:


from pathlib import Path


sample_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()


查看完整回答
反对 回复 2023-10-18
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

创建文件时,您可以指定绝对文件名或相对文件名。如果文件路径以“\”(在 Win 上)或“/”开头,则它将是绝对路径。因此,在第一种情况下,您指定了绝对路径,实际上是:


from pathlib import Path


Path('\Testfile\'sample.txt').absolute()

WindowsPath("C:/Testfile'sample.txt")


每当你在 python 中运行一些代码时,将生成的相对路径将由你当前的文件夹组成,该文件夹是你启动 python 解释器的文件夹,你可以通过以下方式检查:


import os

os.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/testfiles


from pathlib import Path

src_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')


查看完整回答
反对 回复 2023-10-18
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

当我在 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")

我希望你觉得这对你有帮助。


查看完整回答
反对 回复 2023-10-18
  • 3 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信