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



我有几个列表要保存在.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])

您可以将其拆开并用空格分隔存储,然后在读取时将其放回一起,如下所示:

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]

有了这个字符串,我们终于可以添加一个换行符,以确保我们不会把所有内容都组合在一起!


第2部分

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)

最新更新