![](/img/trans.png)
[英]How to read a file line by line, then print the line if it contains a string with a range of value in Python?
[英]Read line in file, print line if it contains string
我有一个工作代码,可以打开一个文件,查找一个字符串,并在包含该字符串的情况下打印该行。 我这样做是为了可以手动决定是否应从数据集中删除该行。
但是,如果我可以告诉程序读取包含两个逗号之间的字符串的行部分,那就更好了。
我现在拥有的代码(见下文)
with open("dvd.txt") as f:
for num, line in enumerate(f, 1):
if " arnold " in line:
num = str(num)
print line + '' + num
像这样打印每一行:
77.224998664,2014-10-19,386.5889,the best arnold ***** ,81,dvd-action,Cheese 5gr,online-dvd-king93,0.19976,18,/media/removable/backup/2014-10-19/all_items/cheese-5gr?feedback_page=1.html, ships from: Germany ships to: Worldwide ,2014-07-30,online-dvd-king,93 1
我希望它打印出来:
,the best arnold ***** , 1
要么
the best arnold ***** 1
我读了这个问题,但我希望避免使用CSV。
如果由于某种原因而难以在逗号或其他任何特定字符之间查找文本,则在要查找的字符串前后打印这3个字会很有用。
使用str.split()
非常简单。 如下修改函数将产生所需的输出。
with open("dvd.csv") as f:
for num, line in enumerate(f, 1):
if " arnold " in line:
num = str(num)
print line.split(',')[3] + '' + num
str.split
通过指定的分隔符将字符串分成列表。 要访问所需的列表条目,只需提供适当的索引(在您的情况下为3)。
str.format()
,您可以使用str.format()
方法产生输出,以使其更加str.format()
:
print "{} {}".format(line.split(',')[3], num)
这也使您可以删除num = str(num)
因为format方法可以处理多种数据类型(与不能进行字符串连接的情况相反)。
或者,您可以使用如下正则表达式:
with open("dvd.txt") as f:
for num, line in enumerate(f, 1):
re_arnold = re.search(r',\s*([^,]*?arnold[^,]*?)\s*,', line)
if re_arnold:
print '{} {}'.format(re_arnold.group(1), num)
然后,这将提取整个条目(逗号之间),而不管其位于哪个字段中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.