2017-02-20 72 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... 
>>>