【问题标题】:use Python to open a file in read mode使用 Python 以读取模式打开文件
【发布时间】:2015-06-21 21:51:43
【问题描述】:

我正在尝试使用 Python 以读取模式打开文件。我收到的错误表明我使用的是 won 文件名或读取模式。当我在我的计算机中键入文件路径时,它可以工作。我试图将输入文件名分配给一个变量,然后以读取模式打开该变量。我还尝试输入完整路径并以读取模式打开路径。两者都给我一个错误。

代码:

workingDirec = raw_input("What is the working directory?")
original_file = raw_input("The input filename is?")

def calculateZscore():
    "Z score calc"
full_original = os.path.join(workingDirec,original_file)
print full_original

f = open ('C:\Users\tpmorris\ProgramingAndScripting\Trial 2 Data\Trial 2 Data\NCSIDS_ObsExp.txt','r')
print f

我的结果:

使用全路径输出:

工作目录是什么?C:\Users\tpmorris\ProgramingAndScripting\Trial 2 Data\Trial 2 Data

输入文件名是?NCSIDS_ObsExp.txt

C:\Users\tpmorris\ProgramingAndScripting\Trial 2 Data\Trial 2 Data\NCSIDS_ObsExp.txt

IOError: [Errno 22] 无效模式 ('r') 或文件名:'C:\Users\tpmorris\ProgramingAndScripting\Trial 2 Data\Trial 2 Data\NCSIDS_ObsExp.txt'

使用可变输出:

IOError: [Errno 2] 没有这样的文件或目录:'full_original'

【问题讨论】:

  • 认为你需要避开你的斜线。
  • open() 函数将默认为读取模式,因此您无需明确说明。

标签: python python-2.7


【解决方案1】:

在 Windows 上,您的路径必须转义,因为 Windows 使用 反斜杠 \ 来表示路径分隔符。

然而,反斜杠通常用作转义序列,并且在 Python 中也是如此!所以你必须像这样“逃避”它们:

f = open ('C:\\Users\\tpmorris\\ProgramingAndScripting\\Trial 2 Data\\Trial 2 Data\\NCSIDS_ObsExp.txt','r')

见:

【讨论】:

    【解决方案2】:

    首先,在 Windows 上,如果要使用 Windows 路径语法,则必须转义反斜杠(双反斜杠),原因由 @James Mills 回答。

    另一种选择是使用正斜杠; Python 会在 os.path 中正确解释这些。

    您可以用作命令行路径输入:

    C:/Users/tpmorris/ProgramingAndScripting/试用 2 数据/试用 2 数据

    或者添加

    /NCSIDS_ObsExp.txt

    如果您要使用硬编码路径,请参考上述内容。

    如果你想打印你的文本文件的内容,你应该对你的代码做一些小的改动:

    首先,应该使用 with 语句打开文件。这将确保调用文件对象的内置 __enter____exit__ 方法,特别是如果您在打开文件后忘记关闭文件时。

    请参阅Understanding Python's with statement 了解更多信息。

    其次,如果您想打印文本文件中的每一行,请不要尝试打印文件对象。而是遍历这些行并打印它们。

    所以你接受命令行输入的代码应该是:

        import os
    
        workingDirec = raw_input("What is the working directory?")
        original_file = raw_input("The input filename is?")
    
    
        full_original = os.path.join(workingDirec,original_file)
        print full_original
    
    
        with open(full_original,'r') as f:
            for line in f:
                print line
        f.close()
    

    我删除了函数的 def 以在您的文件读取代码中执行其他操作。那个 def 应该去别的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多