2014-10-28 57 views
-1

所以我試圖從文本文件中讀取包含十六進制數字的行,然後將其轉換爲十進制數字,然後將其除以3.Python:將列表元素從readline()轉換爲整數?

但是,我收到一個錯誤說:「ValueError :無效的字面INT()與基地16:」

這裏是我做過什麼:

f = open('simp.txt','r') 
line = f.readline() 

while line: 
    line = f.readline() 
    temp = (int(str(line[3:11]),16))//3 
    print(temp) 

誰能告訴我什麼是錯我的代碼?謝謝!

編輯:這裏是我的simp.txt:

00000000 
    000032C8 

所以程序應該打印: 「4333」,因爲13000 // 3 = 4333。

+0

我的猜測是對一些線,數據不是int;什麼在simp.txt? – okaram 2014-10-28 01:54:18

+0

什麼是錯誤的是,你可能試圖將一個字符轉換爲整數。請注意,readline不會從字符串 – smac89 2014-10-28 01:54:22

+0

中除去'\ r'或'\ n'字符請給我們一些示例輸入,並且期望的輸出 – MattDMo 2014-10-28 01:54:52

回答

0

也許行命中的值不會轉換爲十六進制;例如,int('1X',16)會給出一個ValueError。如果這不是問題,請打印行並共享該值或提供simp.txt

+0

將simp.txt添加到編輯部分 – Christin 2014-10-28 02:02:56

0

這是因爲當您使用readline時,它不會從字符串中去除\n\r字符,因此您最終嘗試將其轉換成一個整數

使用f.readline().strip()

一個更好的辦法來做到這一點是:

with open('simp.txt', 'r') as f: 
    for line in f: 
     temp = int(line.strip(), 16) // 3 
     print(temp) 
+0

另一個關於strip()是從字符串中刪除所有前導和尾隨空白。它看起來像「simp.txt」中的行有前導空格,但我想這可能是由於OP在這裏發佈時如何格式化文本。 – 2014-10-28 03:14:24

0

您應該使用line.strip()刪除\n\r在行尾。

你可以嘗試這樣的:

with open("simp.txt", "r") as fp: 
    data = fp.readline() 
    value = int(data.strip(), 16)/3 
    print value 
+0

它的作品謝謝! – Christin 2014-10-28 02:07:46

相關問題