Python 将元组的前2个元素转换为整数

Python 将元组的前2个元素转换为整数,python,Python,我有一个具有以下结构的csv文件: 1234,5678,"text1" 983453,2141235,"text2" 我需要将每一行转换为一个元组并创建一个列表。这就是我所做的 with open('myfile.csv') as f1: mytuples = [tuple(line.strip().split(',')) for line in f1.readlines()] 但是,我希望前两列是整数,而不是字符串。我不知道如何继续这样做,除非再次逐行读取文件并对其进行解析。我可以

我有一个具有以下结构的csv文件:

1234,5678,"text1"
983453,2141235,"text2"
我需要将每一行转换为一个元组并创建一个列表。这就是我所做的

with open('myfile.csv') as f1:
    mytuples = [tuple(line.strip().split(',')) for line in f1.readlines()]
但是,我希望前两列是整数,而不是字符串。我不知道如何继续这样做,除非再次逐行读取文件并对其进行解析。我可以在上面的代码中添加一些内容,以便在将文件转换为元组列表时将str转换为int吗?

您可以使用
isdigit()
检查行中元素中的所有字母是否都是数字,以便将其转换为int,从而替换以下内容:

tuple(line.strip().split(','))
与:

tuple(int(i) if i.isdigit() else i for i in (line.strip().split(','))

与其把所有的逻辑塞进一行,不如把它展开,让它可读

with open('myfile.csv') as f1:
    mytuples = []
    for line in f1:
        tokens = line.strip().split(',')
        mytuples.append( (int(tokens[0]), int(tokens[1]), tokens[2]) )
真正的python程序员并不害怕使用多行。

如果你真的愿意,你可以把这些都塞进一行,但是上帝保佑我,我不知道你为什么要这么做。试着给自己一点呼吸的空间:

def get_tuple(token_list):
    return (int(token_list[0]), int(token_list[1]), token_list[2])

mytuples = []
with open('myfile.csv') as f1:
    for line in f1.readlines():
        token_list = line.strip().split(',')
        mytuples.append(get_tuple(token_list))

那不是更容易阅读吗?我和下一个家伙一样喜欢列表理解,但我也喜欢在三周后坐下来开始阅读时知道一块代码的作用

这是一个csv文件。就这样对待它

import csv

with open("test.csv") as csvfile:
    reader = csv.reader(csvfile)
    result = [(int(a), int(b), c) for a,b,c in reader]
如果您的输入可能与您认为的不同:

import csv

with open('test.csv') as csvfile:
    reader = csv.reader(csvfile)
    result = []
    for line in reader:
        this_line = []
        for col in line:
            try:
                col = int(col)
            except ValueError:
                pass
            this_line.append(col)
        result.append(tuple(this_line))

您可能应该使用try/except,真正的程序员也不怕请求原谅;)