在.txt文件中查找字符串

时间:2016-03-28 11:02:43

标签: python string tkinter

我想在不同的.txt文件中找到一个特定的字符串,我可以在我的计算机文件中选择。这段代码实际上有效:

string = "example" 
fichier = open(file_path, "r")
for line in fichier:
    if string in line:
        print string
fichier.close()

但是我必须自己编写路径,当我添加这些代码行以便选择文件而不自己写入整个文件的路径时:

from Tkinter import Tk
from tkFileDialog import askopenfile
import os

Tk().withdraw()
file = askopenfile()
file_path = os.path.realpath(file)
string = "example" 
fichier = open(file_path, "r")
for line in fichier:
    if string in line:
        print string
fichier.close()

这是追溯:

Traceback (most recent call last):
      File "C:\Users\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\Lib\sip-4.18.dev1603251537\fichier txt.py", line 13, in <module>
        file_path = os.path.realpath(file)
      File "C:\Users\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\ntpath.py", line 488, in abspath
        path = _getfullpathname(path)
    TypeError: coercing to Unicode: need string or buffer, file found

我看不出有什么问题,因为os.path.realpath()给出了一条路径,对吧?我想我的问题来自askopenfile(),我无法找到它返回的数据类型。 如果你能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

askopenfile()不会返回文件名称;它返回一个文件 object 。这意味着您不需要自己打开。你可以这样做:

from Tkinter import Tk
from tkFileDialog import askopenfile
import os

Tk().withdraw()
fichier = askopenfile()
string = "example" 
for line in fichier:
    if string in line:
        print string
fichier.close()

你不应该使用file作为变量名,因为在Python2中它会影响内置类型。