我应该如何将整数写入文本文件,然后在Python中使用它们?

时间:2015-05-23 20:06:52

标签: python python-3.x

我有一些整数,我想放在.txt文件上。我这样做的方法如下int1 = 4565int2 = 3int3 = 169

savedata = open("SaveData.txt","w")
savedata.write("{}\n{}\n{}".format(int1,int2,int3))
savedata.close()
exit()

生成的.txt文件如下所示:

4565
3
169

阅读文件时,我就是这样:

LoadData = open("SaveData.txt","r+")
new1 = LoadData.readlines(1)
format1= ("".join(new1))
new_int1 = int(format1)
new2 = LoadData.readlines(2)
format2 = ("".join(new2))
new_int2= int(format2)
new3 = LoadData.readlines(3)
format3 = ("".join(new3))
new_int3= int(format3)

对不起,我理解上面的内容可能非常低效和混乱。我上面尝试做的是使用"".join()来摆脱[\n]。由于将它们写入文本文件使它们成为字符串,我使用int(format3)将它们变回整数。但是,这是我得到的错误:

ValueError: invalid literal for int() with base 10: '3\n169'

我的问题是,如何将45653169打印到文本文件中,使其成为new_int1 = 4565new_int2 = 3和{ {1}}?

我在使用new_int3 = 169之前尝试使用rstrip("\n"),但我无法解决此问题。

4 个答案:

答案 0 :(得分:1)

.readlines(x)中,x参数表示要读取的行数,而不是哪行。这意味着new2 = LoadData.readlines(2)最终会读取第2行和第3行。只需一次坚持一行,它就会按预期工作。通过切换到.readline(),您还可以跳过不必要的.join()

答案 1 :(得分:1)

我只想写一个可以识别整数的JSON文件。考虑到您提供的三个整数示例,简化了JSON文件的结构。 JSON documentationPython JSON documentation

import json

int1 = 4565
int2 = 3
int3 = 169

line = []
for num in [int1, int2, int3]:
    line.append(num)

print(json.dumps(line))

json_fnw = open('numbers.json', 'w')
json.dump(line, json_fnw)
json_fnw.close

然后,稍后当您想要提取值时:

json_fnr = open('numbers.json', 'r')
json_data = json.load(json_fnr)
json_fnr.close

print(json_data)

更复杂的数据结构的另一种方法是创建这样的JSON: {“整数”:[4565,3,169]}

使用此代码:

main_dict = {}
line = []
for num in [int1, int2, int3]:
    line.append(num)
main_dict['integers'] = line

json_fnw = open('numbers.json', 'w')
json.dump(main_dict, json_fnw)
json_fnw.close

将提取数据如下:

json_fnr = open('numbers.json', 'r')
json_data = json.load(json_fnr)
json_fnr.close

for num in json_data['integers']:
    print(num)

答案 2 :(得分:0)

尝试使用元组解包:

with open(filename) as f:
    int1, int2, int3 = (int(val) for val in f.read().split())

拆分的默认行为是拆分任何空格,包括换行符。

或者你可以迭代文件对象本身,而不是剥离换行符。

with open(filename) as f:
    int1, int2, int3 = (int(l.strip()) for l in f)

答案 3 :(得分:0)

当您阅读整个文件时,您应该

'4565\n3\n169'

将此格式化为数组的最简单方法应该是

values = map(int, filter(None, f.read().split('\n')))