我有一些整数,我想放在.txt
文件上。我这样做的方法如下int1 = 4565
,int2 = 3
和int3 = 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'
我的问题是,如何将4565
,3
和169
打印到文本文件中,使其成为new_int1 = 4565
,new_int2 = 3
和{ {1}}?
我在使用new_int3 = 169
之前尝试使用rstrip("\n")
,但我无法解决此问题。
答案 0 :(得分:1)
在.readlines(x)
中,x
参数表示要读取的行数,而不是哪行。这意味着new2 = LoadData.readlines(2)
最终会读取第2行和第3行。只需一次坚持一行,它就会按预期工作。通过切换到.readline()
,您还可以跳过不必要的.join()
。
答案 1 :(得分:1)
我只想写一个可以识别整数的JSON文件。考虑到您提供的三个整数示例,简化了JSON文件的结构。 JSON documentation,Python 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')))