-1

我是 Python 新手。我正在寻找从包含字符的文件中删除所有行的最佳方法。

例如,从下面看,处理后只存在 User1、User2、User3 和 User 4。注意用户 4 有一个空格。

5!pY
"TmL
c]+y?"
|)}?E
\e2g%
User1
User2
User3
User 4
11-01-05
[GO-B

如果有人能指出我正确的方向,我将不胜感激。

谢谢

4

3 回答 3

2

如果您可以确保您将拥有一个用户字,您可以使用它来识别“有效”文本:您可以使用正则表达式来查找字符串“用户”,后跟 0 个或多个空格,后跟一个或更多数字:

>>> import re
>>> line='5!pY "TmL c]+y?" |)}?E \e2g% User1 User2 User3 User 4 11-01-05 [GO-B'
>>> regex=re.compile("User\s*\d+")
>>> regex.findall(line)
['User1', 'User2', 'User3', 'User 4']

否则,您需要编辑问题并提供更多信息。

于 2012-08-01T17:22:04.033 回答
0

我认为所有这些行都包含字符,所以我假设您的意思是标点符号和空格?

import sys,string
xChars = string.punctuation + " "
for x in sys.stdin:
        for c in x. strip():
                if c in xChars:
                        break
        else:
                print x.strip()

在包含您的示例数据的文件“deleteme”上运行此脚本:

> cat deleteme | python dellines.py 
User1
User2
User3
于 2012-08-01T17:31:43.327 回答
0

如果您的意思是删除所有包含非字母、数字或空格字符的行,那么这应该可以解决问题。

import string

data = """5!pY
TmL
c]+y?"
|)}?E
\e2g%
User1
User2
User3
User 4
11-01-05
[GO-B"""

allowed = string.letters + string.digits + ' '

clean_data = [item for item in data.split('\n') if set(item).issubset(allowed)]
print clean_data #  ['TmL', 'User1', 'User2', 'User3', 'User 4']
于 2012-08-01T17:30:43.870 回答