2017-06-06 56 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