Python 将元组的前2个元素转换为整数
我有一个具有以下结构的csv文件: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()] 但是,我希望前两列是整数,而不是字符串。我不知道如何继续这样做,除非再次逐行读取文件并对其进行解析。我可以
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,真正的程序员也不怕请求原谅;)