Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.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 - Fatal编程技术网

在python中有没有一种简单的方法可以将一组一种类型的变量转换成另一种类型

在python中有没有一种简单的方法可以将一组一种类型的变量转换成另一种类型,python,Python,我正在读取一个csv文件,并将每个列中的值分配到变量中,以供以后处理。行中并非所有值都是整数。有没有一种方法可以轻松地将一组变量从字符串大量转换为整数?我不想输入: var1 = int(var1) 对于每个变量。下面是我的代码片段。请原谅由于代码清理而产生的任何错误:) 更新:哇,谢谢你的快速回复。我只是想指出,并不是所有的值都是整数。还有一些字符串混在一起。是的!您可以将将将值转换为int的函数映射到您的输入: a = list('1234') # ['1', '2', '3', '4']

我正在读取一个csv文件,并将每个列中的值分配到变量中,以供以后处理。行中并非所有值都是整数。有没有一种方法可以轻松地将一组变量从字符串大量转换为整数?我不想输入:

var1 = int(var1)
对于每个变量。下面是我的代码片段。请原谅由于代码清理而产生的任何错误:)


更新:哇,谢谢你的快速回复。我只是想指出,并不是所有的值都是整数。还有一些字符串混在一起。

是的!您可以将将将值转换为int的函数映射到您的输入:

a = list('1234')
# ['1', '2', '3', '4']
b = map(int, a)
# [1, 2, 3, 4]

您可以将一个映射用作Kikohs sugested,也可以在split返回元素列表时遍历该行

for el in line:
   el = int(el)

or 

elements = [int(el) for el in elements]

如果知道每个列所需的类型,可以使用
zip
将类型与值匹配:

line = '1\t2\tstuff\teek\n'
print [typ(val) for typ,val in 
    zip((int, int, str, str), line.strip().split('\t'))]
您可以将其封装在一个类中,这样调用方就不需要查看香肠是如何制作的。在这里,我调整了算法,使用
None
作为传递

class RowConv(object):

    def __init__(self, *coltypes):
        self.coltypes = coltypes

    def __call__(self, row):
        return [typ(val) if typ else val 
            for typ,val in zip(self.coltypes, row)]

lines = ['1\t2\tstuff\teek\n']
conv = RowConv(int, int, None, str)
for line in lines:
    print conv(line.strip().split('\t'))

如果要转换csv文件,请使用
csv
模块

import csv
from itertools import zip_longest

with open('path/to/file.csv') as inf:
    reader = csv.reader(inf, delimiter='\t')
    types = [int, str, int, int, str, int, int]
    for line in reader:
        changed_line = (type_(col) for type_,col in 
                        zip_longest(types,line, fillvalue=str))

changed_行
[int(col1)、str(col2)、int(col3)、int(col4)、str(col5)、int(col6)、int(col7)]+列的其余部分
,您可以根据需要使用它

为什么不使用列表
nums=line[0:7]
然后
nums=map(int,nums)
nums=[int(n)表示nums中的n]
?@Carsten,用于快速回复。我不能在上面运行map,因为不是所有的值都是整数。csv文件中的行中存在相互混合的字符串。
nums=[int(n)if n.isdigit()else n for n in nums]
(对于
12.5
之类的值,此操作将失败,但对于只有数字的真整数,此操作将成功)@AdamSmith,请回答您的评论。你的电话正是我需要的
import csv
from itertools import zip_longest

with open('path/to/file.csv') as inf:
    reader = csv.reader(inf, delimiter='\t')
    types = [int, str, int, int, str, int, int]
    for line in reader:
        changed_line = (type_(col) for type_,col in 
                        zip_longest(types,line, fillvalue=str))