我是Python的初学者,我对文件阅读有疑问: 我需要处理文件中的信息以将其写入另一个文件中。我知道如何做到这一点,但它对我的计算机来说非常耗费资源,因为文件非常大,但我知道它是如何格式化的! 该文件遵循以下格式:
4 13
9 3 4 7
3 3 3 3
3 5 2 1
我不会解释它的用途,因为它需要很长时间而且不会非常有用,但文件必须一次又一次地由四行组成。现在,我使用它来读取文件并将其转换为很长的链:
inputfile = open("input.txt", "r")
output = open("output.txt", "w")
Chain = inputfile.read()
Chain = Chain.split("\n")
Chained = ' '.join(Chain)
Chain = Chained.split(" ")
Chain = list(map(int, Chain))
之后,我只是用"任务ID"来对待它,但我觉得它真的没有效率。 所以你知道我怎么能把链分成多个知道如何格式化的链? 谢谢你的阅读!
答案 0 :(得分:1)
怎么样:
res = []
with open('file', 'r') as f:
for line in f:
for num in line.split(' '):
res.append(int(num))
不是将整个文件读入内存,而是逐行进行。 这有帮助吗?
如果你需要一次走4行,只需添加一个内部循环。
关于输出,我假设你想对输入做一些计算,所以我不一定在同一个循环中做这个。一旦读取完成就处理输入,或者不使用列表,使用队列并在该线程写入时从队列中读取另一个线程。
也许列表理解的效用也会有所帮助(我怀疑这会产生影响):
res = []
with open('file', 'r') as f:
for line in f:
res.append( int(num) for num in line.split() )
答案 1 :(得分:1)
嗯有一些方法可以在不读取文件的情况下写入文件我相信
Add text to end of line without loading file
https://docs.python.org/2.7/library/functions.html#print
projects.stream()
.flatMap(p -> p.getComponents().stream())
.collect(Collectors.toList());
这可能会有所帮助,我也是新手,但是有更好的google fu XD
答案 2 :(得分:0)
也许一行一行。这样就消耗了更少的内存。
inputfile = open("input.txt", "r")
output = open("output.txt", "a")
while True:
line = inputfile.readline()
numbers = words.split(" ")
integers = list(map(int, numbers))
if not line:
break
单词中可能有换行符\n
。您还应该用空字符串替换它。
答案 3 :(得分:0)
如果您不想消耗内存(如果文件非常大,您可以运行它),您需要逐行阅读留言权。
with open('input.txt', 'w') as inputfile, open('"output.txt', 'w') as output:
for line in inputfile:
chain = line.split(" ")
#do some calculations or what ever you need
#and write those numbers to new file
numbers = list(map(int, chain))
for number in numbers
output.write("%d " % number)