![](/img/trans.png)
[英]Converting a list of strings of numbers to tuples with integers Python3
[英]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
模块。 假设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.