系统生成一个文本文件。它包含超过100行。我想在文件中找到一行。
some text **
Actions Pending are: Action-1, Action-2,....Action-3 (this is another new line)
some text**
需要在待处理数组中获取操作。
我用过
for index in text:
rc.logMessage(str(index))
它一次打印每个字符而不是行。
帮助我如何解析此文件以将操作转换为数组。
提前致谢
答案 0 :(得分:4)
类似的东西:
d = """some text **
Actions Pending are: Action-1, Action-2, Action-3
some text**
"""
res = []
for line in re.findall('Actions Pending are: (.+)', d):
res.extend([action.strip() for action in line.split(',')])
['Action-1', 'Action-2', 'Action-3']
答案 1 :(得分:3)
您可以尝试这样的事情:
pendingActions = []
textToSearch = 'Actions Pending are:'
for line in open(filename, 'r'):
line = line.strip()
if line and line.startswith(textToSearch):
pendingActions.extend([x.strip() for x in line[len(textToSearch):].split(',') if x.strip()])
答案 2 :(得分:3)
您需要遍历文件,而不是从文件中读取的字符串。
with open(filename) as text:
for line in text:
rc.logMessage(some_function_of_the_line(line))
迭代文件会给你一行;迭代字符串可以得到字符/字节。
答案 3 :(得分:2)
您想要str.splitlines()
http://docs.python.org/library/stdtypes.html#str.splitlines
for index in text:
rc.logMessage(str(index))
变为:
for index in text.splitlines():
rc.logMessage(str(index))
答案 4 :(得分:1)
尝试这样的事情
with file("your_file") as logfile:
result = [line for line in logfile if line.startswith("Actions pending")]
这样结果你将拥有所有行动。
答案 5 :(得分:0)
search_string = 'Actions Pending are: '
for line in open('yourfile.txt', 'r').readlines():
if line.startswith(search_string):
actions = line[len(search_string):].split(',')
break
print actions
Artsiom更快:parsing text file for a line, in python,也许我的版本更具可读性。
答案 6 :(得分:0)
这是一个单行(为了好玩):
s = """some text **
Actions Pending are: Action-1, Action-2, Action-3
Actions Pending are: Action-4, Action-5, Action-6
some text**"""
[a for ln in s.splitlines() if ln.startswith("Actions Pending") for a in ln[len("Actions Pending are: "):].split(', ')]
------
['Action-1', 'Action-2', 'Action-3', 'Action-4', 'Action-5', 'Action-6']
要使用文件而不是字符串,请将s.splitlines()替换为f.readlines()。注意,我不会在实践中使用此代码;这只是为了好玩。