Python如何将换行符转换为int()

2024-04-24 11:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个列表要保存在一个.txt文件中,都在一个新行上。所以,我有

list1 = [12, 32, 233]
list2 = [345, 823, 209]

等等。。。 我也是

with open("textfile.txt", "w") as f:
    f.write(str(list1))
    f.write("\n")
    f.write(str(list2))

但是当我尝试读取文件时,如int(),我得到一个错误,说:invalid literal for int() with base 10,因为程序认为\n也是一个字符,无法将其转换为int()。我如何解决这个问题? 阅读线:

with open("textfile.txt", "r") as f:
    data = f.readlines()
    actualList1 = int(data[0])
    actualList2 = int(data[1])

Tags: 文件txt列表dataas错误withopen
3条回答

您可以将其拆开并以空格分隔存储,然后在阅读时将其重新组合在一起:

list1 = [12, 32, 233]
list2 = [345, 823, 209]

with open("textfile.txt", "w") as f:
    for lst in [list1,list2]:
        f.write(" ".join([str(i) for i in lst]) + "\n")

with open("textfile.txt", "r") as data:
    data = [i.strip() for i in data.readlines()]
    x = [[int(num) for num in i.split()] for i in data]

print(x)
[[12, 32, 233], [345, 823, 209]]

发生了什么事

让我们把它分解成两个步骤存储值检索值

第1部分

with open("textfile.txt", "w") as f:
    for lst in [list1,list2]:
        f.write(" ".join([str(i) for i in lst]) + "\n")

所有这些都是存储由空格分隔的列表

使用join函数,我们可以通过一种解决方法轻松完成这一任务;由于列表中存储的值是整数,因此与此函数一起使用时,这些值必须是字符串。因此使用以下列表理解:[str(i) for i in lst]

有了这个字符串,我们最终可以添加一个换行符,以确保我们没有将所有内容组合在一起


第二部分

with open("textfile.txt", "r") as data:
    data = [i.strip() for i in data.readlines()]
    x = [[int(num) for num in i.split()] for i in data]

这有点复杂,本质上,这会创建一个文本文件行列表,然后去除其中的换行符

由此,我们用空格来split每行,然后在新创建的列表中将每个字符串转换为一个整数值

list1 = [12, 32, 233]
list2 = [345, 823, 2209]

with open("textfile.txt", "w") as f:
    f.write(str(list1))
    f.write("\n")
    f.write(str(list2))

with open("textfile.txt", "r") as f:
    data = f.read()# since every line but the last ends with a '\n' I rather read than split to lines 
data = data.splitlines()
#you list is a string now so I split it like one
actualList1 = [int(x) for x in data[0][1:-1].split(',')]# split from 1 to -1 will remove parenthesize, after I split by ',' because its seperates the values
actualList2 = [int(x) for x in data[1][1:-1].split(',')]

print(actualList1)
print(actualList2)

输出:

[12, 32, 233]
[345, 823, 2209]

请注意转换问题是如何由'['']'字符引起的

您需要的是剥离所有这些字符(也包括'\n'),然后将这些数字字符串拆分为一个列表。最后,您只需将它们转换为int

在本例中,我们知道该文件至少有两行(此代码与您的代码类似):

list1 = [12, 32, 233]
list2 = [345, 823, 209]

with open("textfile.txt", "w") as f:
    f.write(str(list1))
    f.write("\n")
    f.write(str(list2))


with open("textfile.txt", "r") as f:
    data = f.readlines()
    actualList1 = [int(v) for v in data[0].strip("[]\n").split(",")]
    actualList2 = [int(v) for v in data[1].strip("[]\n").split(",")]
    print(actualList1)
    print(actualList2)

输出:

[12, 32, 233]
[345, 823, 209]

前面的剪贴将修复应用于您的代码,但看看这个解决方案,它也适用于可变行数(此外,它更优雅):

with open("textfile.txt", "r") as f:
    data = f.readlines()
    for d in data:
        actualListRow = [int(v) for v in d.strip("[]\n").split(",")]
        print(actualListRow)

相关问题 更多 >