在python中解析一行的文本文件

时间:2011-08-04 11:21:43

标签: python file parsing text

系统生成一个文本文件。它包含超过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))

它一次打印每个字符而不是行。

帮助我如何解析此文件以将操作转换为数组。

提前致谢

7 个答案:

答案 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()。注意,我不会在实践中使用此代码;这只是为了好玩。