2015-06-21 93 views
2

我試圖用Python讀取模式打開文件。我收到的錯誤提示我正在使用won文件名或讀取模式。當我將文件路徑輸入到我的電腦中時,它可以正常工作。我試圖將輸入文件名分配給一個變量,然後以讀模式打開變量。我也嘗試輸入完整路徑並在讀取模式下打開路徑。這兩個遊戲我是一個錯誤。使用Python在讀取模式下打開文件

代碼:

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:\用戶\ tpmorris \ ProgramingAndScripting \試驗2 Data \ Trial 2 Data

輸入文件名是?NCSIDS_ObsExp。 TXT

C:\用戶\ tpmorris \ ProgramingAndScripting \試驗2數據\試驗2數據\ NCSIDS_ObsExp.txt

IO錯誤:[錯誤22]無效的模式( 'R')或文件名:「C:\用戶\ tpmorris \ ProgramingAndScripting \試驗2數據\試驗2數據\ NCSIDS_ObsExp.txt」

使用可變輸出:

IO錯誤:[錯誤2]沒有這樣的文件或目錄: 'full_original'

+1

我*想*你需要逃避你的斜槓。 –

+0

'open()'函數將默認爲讀取模式,因此您不需要明確地說明它。 – uname01

回答

1

首先,在Windows上,必須轉義反斜槓(雙反斜線)如果您打算使用Windows路徑語法,由@James Mills指出的原因回答。

另一種選擇是使用正斜槓; Python將在os.path中正確解釋這些。

你可以爲你的命令行路徑輸入使用:

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

或者添加

/NCSIDS_ObsExp.txt

上面,如果你要使用硬編碼路徑。

首先,你的文件打開,應使用語句來完成:

此外,如果你要打印你的文本文件的內容,你應該做一些小的改動你的代碼。這將確保文件對象內建於__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應該去其他地方。

3

在Windows上你的路徑必須被轉義,因爲Windows使用反斜槓\表示路徑分隔符。

但是反斜槓通常用作轉義序列,在Python中也可以使用反斜槓!所以,你必須 「逃離」 他們是這樣的:

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

參見:

+1

我認爲正斜槓同樣適用。 – Rishav

相關問題