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

时间:2015-04-08 21:44:48

标签: python

我正在读取csv文件并将每列中的值分配给稍后要处理的变量。并非所有值都是行中的整数。有没有办法轻松地将一堆变量从字符串大规模转换为整数?我不想输入:

var1 = int(var1)
每个变量

。这是我的代码中的一个片段。请原谅因代码清理导致的任何错误:)

line = line.rstrip().split('\t')
num1, str1, num2, num3, str2, num4, num5 = line[0:7]
num1 = int(num1)
num2 = int(num2)
num3 = int(num3)
num4 = int(num4)
num5 = int(num5)

更新:哇,谢谢你的所有快速回复。只是想指出,并非所有值都是行中的整数。也有混合的字符串。

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

如果您知道每列所需的类型,则可以使用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'))

答案 2 :(得分:1)

如果您要转换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_line然后是[int(col1), str(col2), int(col3), int(col4), str(col5), int(col6), int(col7)] + rest_of_columns,您可以根据需要使用它!

答案 3 :(得分:0)

您可以使用地图作为Kikohs sugested或只是遍历行,因为split会返回元素列表。

for el in line:
   el = int(el)

or 

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