2011-02-23 402 views
1

我想在Python 2.6中讀取沒有擴展名(基本上是文本文件)的文件。我曾嘗試以下代碼與下面的錯誤..在沒有擴展名的情況下使用Python讀取文件

for infile in glob.glob(os.path.join(path + "Bookmarks",'*')): 
    review_file = open(infile,'r').read() 
    print review_file 

- >全局名稱水珠沒有定義

f = open(path, "r") 
text = f.readlines() 
print text 

- >打印 「X00 \ X00 \ X00 \ X00 \ X00 \」 等,而這不是這個文件裏面的內容。

編輯: - >文件的內容直接是我想要的,例如,如果文件中有「023492034blackriver0brydonmccluskey」,它會(現在)用一堆二進制值提取它,而我只想要有趣的內容。我會怎麼做?

+1

'glob.glob',啊,好可愛! – 2011-02-23 19:05:20

+1

使用十六進制編輯器打開文件(或設置爲正確的文本編輯器以顯示不可打印的字符)。我敢打賭,你在文本前面有一些NUL字節。 – delnan 2011-02-23 20:14:46

回答

0

您是否試過在文本模式下打開它?但根據文件,'r'應該是'rt'的同義詞。

f = open(path, "rt") 
text = f.readlines() 
print text 
+0

應該是默認值。 – delnan 2011-02-23 19:02:54

+0

是的,謝謝,我剛剛與文檔確認並對我的回答進行了更改 – pyfunc 2011-02-23 19:03:59

+0

根據文檔,沒有「t」模式。 – 2011-02-23 19:05:30

5
  1. 如果你想使用glob模塊,你必須import首先:

    import glob 
    for infile in glob.glob(os.path.join(path, '*')): 
        review_file = open(infile,'r').read() 
        print review_file 
    
  2. 你確定你的文件不包含你所得到的二進制數據?

+0

如果我在第一篇文章中以不同的方式出現,我表示歉意,但我試圖從文件中讀取文本中的直接文本(就像我現在在OP文章中編輯的那樣)。 – 2011-02-23 19:25:09

+0

我不明白。如果你的文件包含不可打印的字符,例如NULL字節'\ x00',你想閱讀那些嗎?你想跳過它們直到找到第一個ASCII字符?當您從包含'\ x00 \ x00abc'的文件'file.read()'時,您期望輸出什麼,而不是'\ x00 \ x00abc'? – 2011-02-24 09:00:24

0

您當前的代碼查看目錄中的每個文件;如果你只想要沒有擴展名的文件,你應該使用glob.glob('*。')

+0

我很抱歉,我已將它編輯爲以下內容:path +「書籤」 – 2011-02-23 19:22:10

0

根據OP的評論,這個問題需要改寫成「我有一個NUL文件在它裏面,我如何擺脫它們,所以我只看到文字「。答案是這樣的:

with open("myfile", 'rb') as f: 
    data = f.read() 
    clean_data = data.replace('\0', '') 
    text = clean_data.decode('ascii') # Or other encoding, if text is not ASCII 
相關問題