我有一个包含这些行的文本文件
wbwubddwo 7::a number1 234 **
/// 45daa;: number2 12
time 3:44
我正在尝试打印,例如,如果程序找到字符串number1
,它将打印234
我从下面的简单脚本开始,但它没有打印出我想要的内容。
with open("test.txt", "rb") as f:
lines = f.read()
word = ["number1", "number2", "time"]
if any(item in lines for item in word):
val1 = lines.split("number1 ", 1)[1]
print val1
返回以下结果
234 **
/// 45daa;: number2 12
time 3:44
然后我尝试将f.read()
更改为f.readlines()
,但这次没有打印出任何内容。
有谁知道其他方法吗?最后,我想获取每行的值,例如234
,12
和3:44
,并将其存储在数据库中。
感谢您的帮助。我真的很感激。
答案 0 :(得分:1)
下面给出的解释:
with open("test.txt", "r") as f:
lines = f.readlines()
stripped_lines = [line.strip() for line in lines]
words = ["number1", "number2", "time"]
for a_line in stripped_lines:
for word in words:
if word in a_line:
number = a_line.split()[1]
print(number)
1)首先' rb'给出字节对象,即b'number1 234'
之类的东西将被返回使用' r'获取字符串对象。
2)您阅读的行将是这样的,它将存储在列表中。
['number1 234\r\n', 'number2 12\r\n', '\r\n', 'time 3:44']
请注意\r\n
那些指定您有换行符的人。要删除使用strip()
。
3)从line
中取出每个stripped_lines
并从word
中取出每个words
并使用in
检查该行中是否存在该单词。
4)a_line
将是number1 234
,但我们只想要数字部分。所以split()
输出将是
['number1','234']
和split()[1]
表示索引1处的元素。(第2个元素)。
5)您还可以使用your_string.isdigit()
更新: 由于您更新了问题和输入文件,因此无效:
import time
def isTimeFormat(input):
try:
time.strptime(input, '%H:%M')
return True
except ValueError:
return False
with open("test.txt", "r") as f:
lines = f.readlines()
stripped_lines = [line.strip() for line in lines]
words = ["number1", "number2", "time"]
for a_line in stripped_lines:
for word in words:
if word in a_line:
number = a_line.split()[-1] if (a_line.split()[-1].isdigit() or isTimeFormat(a_line.split()[-1])) else a_line.split()[-2]
print(number)
为什么这个isTimeFormat()
功能?
def isTimeFormat(input):
try:
time.strptime(input, '%H:%M')
return True
except ValueError:
检查3:44或4:55是时间格式。因为你也把它们视为价值观。 最终输出:
234
12
3:44
答案 1 :(得分:0)
经过一番尝试和错误后,我找到了类似下面的解决方案。这是基于@s_vishnu提供的答案
with open("test.txt", "r") as f:
lines = f.readlines()
stripped_lines = [line.strip() for line in lines]
for item in stripped_lines:
if "number1" in item:
getval = item.split("actual ")[1].split(" ")[0]
print getval
if "number2" in item:
getval2 = item.split("number2 ")[1].split(" ")[0]
print getval2
if "time" in item:
getval3 = item.split("number3 ")[1].split(" ")[0]
print getval3
输出
234
12
3:44
这样,我还可以做其他事情,例如将每个数据保存到数据库。
我愿意接受任何进一步改善答案的建议。
答案 2 :(得分:-1)
search_values = ["number1", "number2", "time"] # values to search for
with open("test.txt", "r") as f: # open your file
for line in f: # read it it line by line
if any(value in line for value in search_values): # check for search_values in line
print(line[line.rfind(" ") + 1:].rstrip()) # print the last value after space
哪个会给你:
234
12
3:44
如果你有星号,你必须更精确地定义你的文件格式,因为拆分不一定会产生你想要的值。