使用Python解析一个简单的文本文件

时间:2012-01-14 16:37:37

标签: python parsing

我是论坛的主持人,我需要修剪那些在那里注册的机器人 如下所示,我可以通过以下方式列出所有用户:

Username number_of_mssages register_date

示例:

- Thurman Valsin0190    0       Sat Jan 14, 2012 5:00 pm
- Rubye Tones01AD   0       Sat Jan 14, 2012 4:59 pm

我需要一个超级简单的Python小程序来解析文本文件的每一行,所以我可以从上面的字符串中得到只有昵称。

- Thurman Valsin0190
- Rubye Tones01AD

这意味着程序必须为每一行删除0及其后面的所有内容。该文本来自.txt文件 我知道这并不困难,但我对Python不是很了解。 提前谢谢!

4 个答案:

答案 0 :(得分:3)

这不是一个python问题,它是一个正则表达式/字符串解析问题......

说每行包含昵称,制表符,然后是0?

是否正确

然后它应该如下:

(假设包含文件中的一行)

nickname = line.split("\t")[0]

答案 1 :(得分:3)

考虑使用正则表达式:

import re

pattern = re.compile(r'(.*?)\s+0\s+')
pattern.findall('- Thurman Valsin0190    0       Sat Jan 14, 2012 5:00 pm')[0] 
# - Thurman Valsin0190

答案 2 :(得分:1)

为什么不拆分为0,前导空格(或制表符)作为拆分键的一部分包含在内,以避免拆分其他零:

with open("filename.txt", "r") as f:
    for line in f:
        nick = line.split(" 0 ")[0].strip() # OR .split("\t0\t") if those are tabs
        print nick

答案 3 :(得分:0)

通过拆分" 0 "字符串进行解析,例如,extract-nickname.py:

#!/usr/bin/env python
import fileinput

for line in fileinput.input():
    nick, sep, rest = line.partition(" 0 ")
    if sep:
       print(nick.strip())

它假定昵称不能包含" 0 ",并且前导/尾随空格不是昵称的一部分。否则,如果标签字符是line.partition("\t")Username之间的分隔符,则可以使用number_of_mssages

Example

$ python extract-nickname.py log.txt
- Thurman Valsin0190
- Rubye Tones01AD

如果您需要更改文件,则可以将inplace=True参数指定为fileinput.input()函数。