如何使用python仅搜索分隔文本文件的第一列

如何使用python仅搜索分隔文本文件的第一列,python,python-3.x,Python,Python 3.x,使用python搜索管道“|”分隔的.txt文件的第一列,该文件包含1000万行。第一列包含电话号码。我想输出该电话号码的整行 该文件是5GB.txt文件,我无法在ms excel或ms access中打开它。所以我想写一个python代码,可以搜索文件并打印出与特定电话号码匹配的整行。电话号码在第一列。我写了一个代码,但它搜索整个文件,速度非常慢。我只想搜索第一列,我的搜索项是电话号码 f = open("F:/.../master.txt","rt") # open file ma

使用python搜索管道“|”分隔的.txt文件的第一列,该文件包含1000万行。第一列包含电话号码。我想输出该电话号码的整行

该文件是5GB.txt文件,我无法在ms excel或ms access中打开它。所以我想写一个python代码,可以搜索文件并打印出与特定电话号码匹配的整行。电话号码在第一列。我写了一个代码,但它搜索整个文件,速度非常慢。我只想搜索第一列,我的搜索项是电话号码

f = open("F:/.../master.txt","rt")      # open file master.txt
for line in f:                      # check each line in the file handle f
 if '999995555' in line:           # if a particular phone number is found
   print(line)                   # print the entire row
f.close()                            # close file

我希望在屏幕上打印整行,第一列包含我正在搜索的电话号码。但是这需要花费很多时间,因为我不知道代码,所以无法搜索该列。

好吧,你在那里的路线是正确的。由于它是一个5GB的文件,您可能希望避免为此分配5GB的RAM。您可能会更好地使用它,因为它正是为您的场景(一个大文件)而设计的

类似于以下的操作应该可以实现这一点,请注意,
.readline()
将返回
'
作为文件结尾,而
'\n'
作为空行。调用
.strip()
只是为了删除
.readline()
在文件中实际每行末尾返回的
'\n'

def search_file_line_前缀(路径,search_前缀):
以open(路径“r”)作为文件句柄:
虽然(正确):
line=file\u handle.readline()
如果行=='':
打破
如果line.startswith(搜索前缀):
屈服线
对于搜索文件行前缀(“文件路径”、“电话号码”)中的结果:
打印(结果)

Imo您的基本方法是正确的,除了简单地遍历文件的每一行之外,您没有其他机会获得正确的行。但是,如果您更确切地知道号码在哪里,您至少可以让您的支票快一点,例如,
line.startswith('9999555')
,而不是
行中的'9999555'。
同意。尤其是在这里,主要的时间损失是读取文件和循环行,而不是搜索模式。但是,如果仍然太慢,您可能希望完全跳过Python,使用实际的文本搜索工具,如
grep
grep 999955 master.txt
,可能会快几个数量级,即使不使用更智能的regexi,如果这是完整的号码,并且您希望确保与该行其他地方的号码不匹配,您也可以尝试
grep'^9999555\|'master.txt
我的主要目的是创建一个搜索用户界面,用户可以在其中输入电话号码并显示结果行。那么,您是建议在python中嵌入“grep”还是直接在shell上执行它?你认为我可以用别的方法做得更好吗?