簡體   English   中英

Python將列表中的字符串轉換為數字

[英]Python converting strings in a list to numbers

我遇到了以下錯誤消息:

int()的基數為10的文字無效:'“2”'

2在外面用單引號括起來,在里面用雙引號括起來。 此數據位於使用print primes[0]primes列表中。

primes列表中的樣本數據:

["2","3","5","7"]

primes列表是通過以下CSV文件從CSV文件創建的:

primes=csvfile.read().replace('\n',' ').split(',')

我試圖嘗試將primes列表中的字符串轉換為整數。

通過谷歌,我在SE上遇到了類似的問題,我嘗試了兩個與我的問題IMO相關的常見答案。

使用map():

primes=map(int,primes)

使用列表理解:

primes=[int(i) for i in primes]

不幸的是,當我使用它們中的任何一個時,這些都會給出與上面列出的相同的錯 當使用而不是int()時,我得到long()的類似錯誤消息。

請指教。

你要:

  • 閱讀每個csv行
  • 使用所有行的展平版本創建單個整數列表。

因此,您必須處理引號(有時它們甚至可能不在此處,具體取決於文件的創建方式)以及當您用空格替換換行時,不會將最后一個數字與第一個數字分開下一行。 你有很多問題。

請改用csv模塊。 假設f是打開文件的句柄,然后:

import csv

nums = [int(x) for row in csv.reader(f) for x in row]

解析單元格,剝離引號(如果存在)並展平+轉換為整數,在一行中。

要限制讀取的數字,您可以創建生成器理解而不是列表理解,並且僅消耗n個第一項:

n = 20000 # number of elements to extract
z = (int(x) for row in csv.reader(f) for x in row)
nums = [next(z) for _ in xrange(n)] # xrange => range for python 3

更好的是,為了避免StopIteration異常,您可以使用itertools.islice ,因此如果csv數據結束,您將獲得完整列表:

nums = list(itertools.islice(z,n))

(請注意,您必須回放文件以多次調用此代碼,否則您將無法獲得任何元素)

沒有 csv模塊的情況下執行此任務當然是可能的( [int(x.strip('"')) for x in csvfile.read().replace('\\n',',').split(',')] )但更復雜且容易出錯。

你可以試試這個:

primes=csvfile.read().replace('\n',' ').split(',')
final_primes = [int(i[1:-1]) for i in primes]

試試這個:

import csv

with open('csv.csv') as csvfile:
    data = csv.reader(csvfile, delimiter=',', skipinitialspace=True)
    primes = [int(j) for i in data for j in i]
    print primes

或避免重復

    print set(primes)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM