2017-02-20 73 views
0

我正在研究python中的一個小腳本,其中我必須遍歷具有多種類型文件的目錄,但我只想打開文本文件。那麼我該怎麼做,下面是我的代碼。如何只打開目錄中的文本文件 - Python

import os,re 

pat=re.compile(input("Enter the text you want to search for : ")) 
fpath=r'C:\Users\Python\Python_my_Scripts\' 
for i in os.walk(fpath): 
    for fname in i[-1]: 
     fpath=os.path.join(i[0],fname) 
     try: 
      IN=open(fpath,"r") 
     except Exception as e: 
      print(e) 
     else: 
      line_num=0 
      for line in IN: 
       line_num+=1 
       if not re.search(r'^\s+#',line): 
        if re.search(pat, line): 
         print("{1:>2d} : {0}".format(fpath,line_num)) 

如果目錄包含任何非文本文件,代碼基本上會在try段中斷。

那麼,有什麼幫助嗎?

+0

你可以添加一個檢查,看看文件名是否以'.txt'結尾? – WhatsThePoint

+0

@WhatsThePoint:不幸的是我不能這樣做,事實上我不想這樣做,一個文本文件可能沒有.txt擴展名。 – Rohit

回答

0

使用glob的模式來獲得文件名列表:

import glob 
glob.glob('*.txt') 
+0

這並非意圖,文件可以是文本文件,可能沒有.txt擴展名。 – Rohit

0

你說的「純文本文件」是什麼意思?哪些擴展?或者你是否通過其他屬性定義文本文件?

1

使用python-magic可以檢查文件類型,與使用file command時一樣。然後,您可以檢查magic.from_file的輸出以查看該文件是否爲文本文件。

>>> import magic 
>>> magic.from_file("/bin/bash") 
'ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=75a0ba19d5276d9eb81d6f8e9e2cb285da333296, stripped' 
>>> magic.from_file("/etc/fstab") 
'ASCII text' 
>>> if 'text' in magic.from_file("/etc/fstab").lower(): 
...  print("a text file...") 
... 
a text file... 
>>>