我正在使用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 :(得分:1)
使用glob按模式获取文件名列表:
import glob
glob.glob('*.txt')
答案 1 :(得分:1)
使用python-magic,您可以像使用file command一样检查文件类型。然后,您可以检查>>> 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...
>>>
的输出,以查看该文件是否为文本文件。
<ul class="list-group" id="sortable">
<form class="form-horizontal" role="form" method="POST" id="priority" action="{{ url('somewhere') }}">
{{csrf_field()}}
@foreach($itemsas $item)
<li class="list-group-item active">{{$item->name}}
<input type="hidden" name="priority" value="{{$item->id}}">
</li>
@endforeach
</form>
</ul>
答案 2 :(得分:0)
使用os.walk
对文件进行迭代或使用glob
包获取文件,并检查您的文件是二进制还是文本,这可能对您有帮助,How can I detect if a file is binary (non-text) in python?。