2012-12-24 52 views
-2

我在某個位置(當前位於C:\ dropbox)中有一個「Reference.txt」文件,我試圖從該位置打開它並獲取其內容,內容「Reference.txt」只是一個詞,如「E4567ABCDE16220.1」,我需要使用以下這個數據,任何人都可以提供這樣的輸入?從位置打開文件並獲取文本

file="Reference.txt" 
pL="ab1234" 

def location(file,pL): 
    if pL is 'ab1234': 
     file = open('C:\dropbox\' + file,'r') 
     print file 
    else: 
     file = open('C:\dropbox\' + pL + file,'r') 

def main(): 
    data=location(file,pL) 

if __name__ == '__main__': 
    main() 
+0

你需要閱讀[轉義序列](http://learnpythonthehardway.org/book/ex10.html) – inspectorG4dget

回答

2

使用is測試相等;改爲使用==is對象身份的測試,這是一個完全不同的水壺。使用os.path.join() function構建路徑。而在Python字符串中使用r''原始字符串包含\反斜槓路徑,則\反斜槓到\\或改用正斜線(/),\'意思是「這裏的字符串中插入文字'字符」,不工作的時候你真正想要的是關閉而不是字符串。

import os.path 

def location(filename, pL): 
    if pL == 'ab1234': 
     filename = os.path.join(r'C:\dropbox', filename) 
    else: 
     filename = os.path.join(r'C:\dropbox', pL, filename) 
    with open(filename, 'r') as f: 
     return f.read() 

open()只有打開文件,來獲取數據了,你還需要調用.read()上打開的文件。由於file已經是一個內置的名稱,所以最好不要將它用作變量,所以我已經在上面的代碼中重新命名了它。最後但並非最不重要的,通過使用with構造,當我們讀取數據並從函數返回時,文件對象將自動關閉。

3

您的問題源於您如何打開C:\Dropbox\中的文件。當您使用\時,它會作爲轉義字符來逃避下一個字符的字面含義。因此,如果您想使用雙引號(它本身包含雙引號)來創建一個字符串,則需要在字符串內部轉義所有雙引號。
例如:

假設您想要在變量內部保存字符串Alice told Bob "Mallory knows what we're up to"
如果你把在一個字符串,如下所示:

myStr = "Alice told Bob "Mallory knows what we're up to"" 

那麼Python認爲"Alice told Bob "是一個字符串,然後不知道什麼是Mallory knows what we're up to做什麼。因此,翻譯會抱怨。

爲了捕獲的概念,即在雙引號字符串本身的一部分,您應該逃避他們如下:

myStr = "Alice told Bob \"Mallory knows what we're up to\"" 

但是,如果你想有一個\作爲字符串的一部分,會發生什麼?
然後,你需要躲避\另一個\

myStr = "this is a backslash: \\" 

所以,當你試圖打開"C:\Dropbox\somefile",蟒蛇解釋,由於有兩個轉義序列:\D\s,替代那些轉義序列的值在該字符串中,並嘗試打開文件系統中不存在的結果文件名。要正確地逃避這一點,你應該這樣做:

myfile = open("C:\\Dropbox\\somefile.txt") 

然而,這可能會變得難以閱讀,有時。因此,您可能需要使用原始字符串(前綴爲r)。原始字符串不會在字符串中替換轉義序列:

myfile = open(r"C:\Dropbox\somefile.txt") 

因此,r"C:\Dropbox\somefile.txt"相當於你在做什麼"C:\\Dropbox\\somefile.txt"

還有一個評論:你應該使用os.path.join的接合部分時文件路徑一起。而你會做

myfile = open('C:\\dropbox\\' + pL + file,'r') 

你應該真正做到

myfile = open(os.path.join("C:\\dropbox", pL, filename),'r') 

最後一個音符:
不要對你的變量filestrlist還是真的任何其他內建類型 - 這會惹解釋者的行爲併產生不必要的結果

0

您需要閱讀文件的內容,您可以這樣做:

file="Reference.txt" 
pL="ab1234" 

def location(file,pL): 
    if pL == 'ab1234': 
     file = open('C:\dropbox\' + file,'r') 
    else: 
     file = open('C:\dropbox\' + pL + file,'r') 

    return file.readlines() 

def main(): 
    data=location(file,pL) 
    print data 

if __name__ == '__main__': 
    main() 

讀取文件的內容,您可以使用read()readline()readlines()取決於您need.Google的file對象應該幫你

0

下列固定的問題

import os.path 

def location(filename, pL): 
    if pL == 'ab1234': 
     filename = os.path.join(r'C:\dropbox', filename) 
    else: 
     filename = os.path.join(r'C:\dropbox', pL, filename) 
    with open(filename, 'r') as f: 
     return f.read()