2017-06-06 83 views
-1

问题:Python的字母数字

我必须要经过有串线的文本文件,并确定有关每一行,如果它是字母或没有。如果线路例如字母打印“5345m345ö34l是字母”的文本文件

例子:

5345m345ö34l 

no2no123non4 

%#""SGMSGSER 

我的代码如下:

file = open('file.txt','r') 
data = file.readlines() 

for i in data: 
    i.strip() 
    if (i.isalnum()): 
     print (i, 'is alphanumeric') 
    else: 
     print (i, 'not alphanumeric') 
    file.close() 

我们可以看到,第一和第二行是字母数字,但程序不起作用?

+1

'数据= file.read()' –

+3

尝试:'I = i.strip()'(因为字符串是_immutable_和他们的方法并不在他们的内部数据进行操作,但而是返回其他字符串)。并且,修理你的缩进。 – CristiFati

+1

它是如何工作的?你是否收到错误?你是否得到意想不到的输出? – PrestonM

回答

0

试试这个,看看这个工作 -

file = open('file.txt','r') 
data = file.readlines() 

for i in data: 
    stripped_line = i.strip() 
    if (stripped_line.isalnum()): 
     print (stripped_line, 'is alphanumeric') 
    else: 
     print (stripped_line, 'not alphanumeric') 
file.close() 
+1

是的,这正是我正在寻找的。每条线都必须被剥离,因为它在最后包含一个不是字母数字部分的空格。我做错了没有将剥离的变量存储到变量中。谢谢您的回答! –

0

编辑

从你原来的职位,你要正确对待拉丁字符(即那些有口音)作为有效的字母数字输入。为了做到这一点,你应该在unicode中加载原始文件,并且在测试字母数字属性时,应该将重音字母转换为普通字母。这将做到这一点:

# -*- coding: utf-8 -*- 
import unicodedata 
import codecs 

file = codecs.open('file.txt','rb', encoding="utf-8") 
data = file.readlines() 
for i in data: 
    i = i.strip() 
    converted_data = ''.join((c for c in unicodedata.normalize('NFD', i) if unicodedata.category(c) != 'Mn')) 
    if (converted_data.isalnum()): 
     print (i, 'is alphanumeric') 
    else: 
     print (i, 'not alphanumeric') 
file.close() 
+0

如果缩进是问题,它甚至不会运行。 –

+0

这可能不是问题,但我们只能从原来的帖子去,如果海报直接复制我的代码到他们的终端,那么他们应该注意到所有的差异。 – TLOwater

+0

这里我们不需要'readlines'。一个文件是可迭代的,所以对于我in file:'就足够了,它可以处理不适合计算机内存的文件。 – Matthias