如何只打开目录中的文本文件 - Python

时间:2017-02-20 11:32:59

标签: 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段中断。

那么有什么帮助吗?

3 个答案:

答案 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?