【问题标题】:Regarding file io in Python关于Python中的文件io
【发布时间】:2021-01-22 12:20:49
【问题描述】:

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

f = open('\TestFiles\'sample.txt', 'w')
f.write('I just wrote this line')
f.close()

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

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

f = open('sample1.txt', 'w')
f.write('test')
f.close()

我找到了在我的文件夹中创建的“sample.txt”文件。根据我的知识,即使第一个代码是有效的,是否有理由不创建文件?

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

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

谢谢。

【问题讨论】:

    标签: python python-3.x io text-files file-writing


    【解决方案1】:

    您要查找的是relative paths,长话短说,如果您想在项目文件夹内的“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()

    【讨论】:

      【解决方案2】:

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

      希望对您有所帮助。

      【讨论】:

      • open("testfiles//hello.txt") 如果您的平台的路径分隔符不是/,这可能会出现问题
      【解决方案3】:

      创建文件时,您可以指定绝对文件名或相对文件名。 如果您以“\”(在 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 中存储/读取文件。您可以做的是使用__file__ 获取script.py 的路径并构建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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 2011-02-09
        • 2010-09-22
        • 1970-01-01
        • 2014-10-23
        相关资源
        最近更新 更多