Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将列表中的字符串转换为数字_Python_Python 2.7_List_Csv - Fatal编程技术网

Python将列表中的字符串转换为数字

Python将列表中的字符串转换为数字,python,python-2.7,list,csv,Python,Python 2.7,List,Csv,我遇到以下错误消息: 基数为10的int()的文本无效:““2” 2在外面用单引号括起来,在里面用双引号括起来。此数据位于使用打印素数[0]的素数列表中 primes列表中的样本数据: ["2","3","5","7"] primes列表是通过以下方式从CSV文件创建的: primes=csvfile.read().replace('\n',' ').split(',') 我正在尝试将素数列表中的字符串转换为整数 通过谷歌,我在SE上遇到了与我类似的问题,我尝试了与我的问题相关的两个常见答案

我遇到以下错误消息:

基数为10的int()的文本无效:““2”

2在外面用单引号括起来,在里面用双引号括起来。此数据位于使用
打印素数[0]
素数列表中

primes
列表中的样本数据:

["2","3","5","7"]
primes
列表是通过以下方式从CSV文件创建的:

primes=csvfile.read().replace('\n',' ').split(',')
我正在尝试将
素数
列表中的字符串转换为整数

通过谷歌,我在SE上遇到了与我类似的问题,我尝试了与我的问题相关的两个常见答案

使用map():

使用列表理解:

primes=[int(i) for i in primes]
不幸的是,当我使用它们中的任何一个时,它们都会给出与上面列出的相同的错误消息。当使用long()代替int()时,我会收到类似的错误消息

请告知。

您可以尝试以下方法:

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

  • 阅读每一行
  • 使用所有行的展平版本创建单个整数列表
因此,您必须处理引号(有时引号甚至可能不在此处,具体取决于文件的创建方式),并且当您用空格替换换行符时,这不会将一行的最后一个数字与下一行的第一个数字分开。你有很多问题

改用
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)


您的csv在引号中有一组素数?问题是引号。只需删除引号。使用
csv
模块,引号将被剥离,您将能够转换数字。您可以告诉我们输入的内容是什么吗?例如,
primes=csvfile.read()的输出是什么。替换('\n','');print(primes[:160])
?你能展示你的输入样本吗?抱歉,你应该在这里提供样本数据-1。我不知道你是如何获得这方面的投票的。我认为这不会起作用,因为它是根据逗号分割的,所以下一行的最后一个数字和第一个数字不会被分割向下投票,因为这个答案是“试试这个:{code}”“。如果你编辑一些更好的解释,我将删除否决票。@Darthfett没有否决票,因为我不喜欢在回答同一个问题时这样做,但我高度怀疑它是否有效,原因如上所述。@Jean-Françoisfare你的解决方案肯定是最有力的;但是,因为OP没有发布他的样本文件我真的说不出来。@Jean-Françoisfar Same,我给了你一个向上的投票,因为从OP的问题的当前状态来看,这似乎是他需要的。如果这个答案真的解释了意图,我会取消对这个答案的向下投票(但如果它看起来正确,我只会向上投票)。试试这个,得到“TypeError:int()参数必须是字符串、类似于对象的字节或数字,而不是“列表”"@Jean-Françoisfar你能给我看一下你的数据输入吗?没必要:
i
是一个
列表
,因为
数据
是一个
csv.reader
。你测试过这个吗?但问题从来没有说csv的格式,是行还是列,或者两者都是。既然OP是按逗号分割的,我猜有不止一列。我理解您的代码导入文件中的所有素数。我如何限制导入的元素数量?我在素数文件中有数百万个素数-我如何限制导入的元素数量,例如200000?很好。对于python2,使用
xrange
而不是
range
。@unseen\u-rider是的,在这种情况下会节省一些内存。因为它被标记为python 2.7我将添加它。运行此代码后,我会得到一个
StopIteration
异常。当然,如果您的文件太小。请参阅我的编辑,我已将默认参数添加到
next
,如果您的文件太小,您现在将得到零。