2016-04-14 35 views
0

所以我有這樣的代碼:從一個記事本文件排序的數值數據與字符串它

meme = int 
meme = 1 
import sys 
data = int 

if meme == 1: 
    lines = open('C:\Users\maksn\Desktop\A452\scores class 1').readlines() 
new_data = [] 
for line in lines: 
    new_data.append(int(line.strip())) 
print (new_data) 

我想它讀取字符串數據,但只有數值,所以我可以將它們後來轉換爲整數理清但我得到這個錯誤: (Unicode的錯誤)「unicodeescape」編解碼器不能解碼位置2-3字節:截斷\ UXXXXXXXX逃脫

在目前的文本文件,有這個在它:

KEK得到4

KEK了2

KEK得到了10

任何幫助,將不勝感激。

編輯:

不知道這是有用的,但打開後支架以紅色突出顯示。

+1

這個錯誤聽起來像你的文件以某種意想不到的方式編碼。儘管你的示例內容沒有顯示任何我期望導致問題的內容。實際文件是否可以有空字符或非ASCII字符(例如帶有重音符的名稱) – SpoonMeiser

+0

另外,這是什麼'meme'無意義?爲什麼它最初設置爲'int',並且你的代碼是這樣的,如果它不是'1',它會拋出一個異常。同樣,'data = int'又有什麼用? – SpoonMeiser

+0

我對python和編程一般都不熟悉,所以使用meme來確保編碼運行,而數據部分只是一個測試,看它是否重要。 –

回答

0

首先讓我們知道SpoonMeiser所說的,沒有理由設置meme或data = int。 如果你真的想做你說的話,那麼做以下操作:遍歷每一行,然後閱讀這篇文章(Checking whether a variable is an integer or not)並添加一個if語句來檢查每個讀入的字符是否爲int,然後將其附加到數組中。您還需要添加一些邏輯來處理多位整數。基本上只需將您從任何給定行讀取的所有整數添加到字符串中,然後在字符串上使用int()將其轉換爲int。

如果你真正想要做的只是打印出任何數字,然後忽略有關轉換爲int的部分,如果文件將始終具有形式「kek got x」,那麼只需從每行中刪除第一部分以下功能:

def filter_char(string, char_set): 
for char in string: 
    if char in char_set: 
     string = string.replace(char, "") 
return string 

filter_char(line,「kek has」),然後將其附加到要打印的數組。

最後,確保您使用的是純文本文件;這可能是你得到unicode錯誤的原因。一些文本編輯器(例如Mac的默認文本編輯器)以.rtf格式保存爲默認格式。直接更改文件類型或將粘貼複製到更好的編輯器中。

+0

上面我鏈接到關於檢查數字的帖子,您也可以使用內置的str.isnumeric(),或者反過來使用str.isalpha()去除這些字母。再一次,你會想要一次運行這一個字符(在整行上運行,那麼只有當整行是數字或字母時它們纔會返回true)。使用isalpha()的缺點是它會過濾掉其他不需要的非字母字符(例如@#$) –