使用Python以读取模式打开文件

使用Python以读取模式打开文件,python,python-2.7,Python,Python 2.7,我正在尝试使用Python以读取模式打开文件。我收到的错误表明我正在使用WIN文件名或读取模式。当我把文件路径输入计算机时,它就工作了。我尝试将输入文件名分配给一个变量,然后以读取模式打开该变量。我还尝试键入完整路径并以读取模式打开路径。两人都给了我一个错误 代码: 我的结果: 使用完整路径输出: 工作目录是什么?C:\Users\tpmorris\ProgrammingAndScripting\Trial 2 Data\Trial 2 Data 输入文件名为?NCSIDS_ObsExp.txt

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

代码:

我的结果:

使用完整路径输出:

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

输入文件名为?NCSIDS_ObsExp.txt

C:\Users\tpmorris\programmingandscripting\试用2数据\试用2数据\NCSIDS\u ObsExp.txt

IOError:[Errno 22]无效的模式('r')或文件名:“C:\Users\tpmorris\ProgrammingAndScripting\Trial 2 Data\Trial 2 Data\NCSIDS\u ObsExp.txt”

使用变量输出:


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

必须转义路径,因为Windows使用反斜杠
\
表示路径分隔符

但是反斜杠通常用作转义序列,在Python中也同样使用!所以你必须像这样“逃离”他们:

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


首先,在Windows上,如果要使用Windows路径语法,必须避开反斜杠(双反斜杠),原因由@James Mills answer指出

另一种选择是使用正向斜杠;Python将在os.path中正确解释这些内容

您可以将以下内容用作命令行路径输入:

C:/Users/tpmorris/programmingandscripting/Trial 2 Data/Trial 2 Data

或添加

/NCSIDS_ObsExp.txt

如果您要使用硬编码路径,请转到上面

如果要打印文本文件的内容,还应对代码进行一些小的更改:

首先,应该使用with语句打开文件。这将确保调用文件对象的内置\uuuuu enter\uuuu\uuuu exit\uuuu方法,尤其是在打开文件后忘记关闭文件时

更多信息,请参阅

其次,如果要打印文本文件中的每一行,请不要尝试打印文件对象。而是将这些行循环并打印出来

因此,接受命令行输入的代码应为:

    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应该放在其他地方。

我认为您需要避开斜杠。
open()
函数将默认为读取模式,因此不需要明确说明。
    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()