Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python解析简单文本文件_Python_Parsing - Fatal编程技术网

使用Python解析简单文本文件

使用Python解析简单文本文件,python,parsing,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小程序,它可以解析文本文件的每一行,这样我就可以从上面

我是一个论坛的版主,我需要删减所有在那里注册的机器人。 如下所示,我可以通过以下方式列出所有用户:

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不太了解。
提前谢谢

实际上这不是python问题,而是正则表达式/字符串解析问题

说每一行都包含昵称、制表符和0是正确的吗

那么它应该简单到:

假设行包含文件中的一行

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

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

说每一行都包含昵称、制表符和0是正确的吗

那么它应该简单到:

假设行包含文件中的一行

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

考虑使用正则表达式:

import re

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

考虑使用正则表达式:

import re

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

为什么不在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

为什么不在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
通过拆分0字符串进行解析,例如extract-昵称.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

如果需要在原地更改文件,则可以指定inplace=True参数来执行操作。

通过在0字符串上拆分来解析,例如extract-昵称.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


如果您需要在原地更改文件,则可以指定inplace=True参数来运行。

您所调用的用户名似乎是两个独立的东西-昵称和用户名。Thurman Valsin0190是用户名。0将始终是0?或者可以是任何一位数字?您所称的用户名似乎是两个独立的东西-昵称和用户名。Thurman Valsin0190是用户名。0将始终是0?或者可以是任何一位数字?我需要一个通用程序,而不仅仅是一个用户名。@user963658这是通用的,模式是匹配0后面的多个空格前的子字符串和后面的多个空格。您可以试一试。我需要一个通用程序,不仅仅是一个用户名。@user963658这是通用的,模式是匹配0后面的多个空格前的子字符串和后面的多个空格。你可以试一试。如果我需要将结果保存在同一个文件中,删除未解析的行?我只需要一个文本文件与削减行,那些只有用户名运行这个程序与外壳和重定向其输出到另一个.txt文件。删除原始.txt文件并将新文件重命名为原始文件。e、 g.python script.py>out.txt rm filename.txt mv out.txt filename.txt如果需要将结果保存在同一文件中,是否删除未解析的行?我只需要一个文本文件与削减行,那些只有用户名运行这个程序与外壳和重定向其输出到另一个.txt文件。删除原始.txt文件并将新文件重命名为原始文件。e、 g.python script.py>out.txt rm filename.txt mv out.txt filename.txt