Python 3.x 将文件中的新字符串逐行添加到新字符串

Python 3.x 将文件中的新字符串逐行添加到新字符串,python-3.x,Python 3.x,我有一个以下格式的数据输出文件,来自我运行的脚本 1. xxx %percentage1 2. yyy %percentage1 . . . 我试图只获取百分比,并将它们逐行附加到相同格式的文件中(在此过程中编写一个新文件) 其主要思想是,每次使用源数据文件运行代码时,我都希望它将这些百分比逐行添加到新文件中 1. xxx %percentage1 %percentage2 %percentage3 ... 2. yyy %percentage1 %percentage2 %percentag

我有一个以下格式的数据输出文件,来自我运行的脚本

1. xxx %percentage1
2. yyy %percentage1
.
.
.
我试图只获取百分比,并将它们逐行附加到相同格式的文件中(在此过程中编写一个新文件)

其主要思想是,每次使用源数据文件运行代码时,我都希望它将这些百分比逐行添加到新文件中

1. xxx %percentage1 %percentage2 %percentage3 ...
2. yyy %percentage1 %percentage2 %percentage3 ...
这就是我能想到的:

import os

os.chdir("directory")

f = open("data1", "r")

n=3

a = f.readlines()
b = []

for i in range(n):
    b.append(a[i].split(" ")[2])

file_lines = []

with open("data1", 'r') as f:
    for t in range(n):
        for x in f.readlines():
            file_lines.append(''.join([x.strip(), b[t], '\n']))
            print(b[t])

with open("data2", 'w') as f:
    f.writelines(file_lines)
通过这段代码,我得到了一个新文件,但是附加的百分比都来自第一行,每一行没有不同。我只能添加一组百分比,它会覆盖它,而不是添加更多


我希望我能正确地解释它,如果您能提供一些帮助,我将非常高兴。

您可以使用dict作为结构来加载和写入数据。然后可以对该dict进行pickle以存储数据

编辑:添加了缺少的返回语句

EDIT2:修复get_数据的返回列表

导入pickle
导入操作系统
输出='output'
转储='dump'
输出_dict={}
如果os.path.存在(转储):
打开(转储,'rb')作为f:
输出=pickle.load(f)
def读取_数据(行):
“”“从键所在的行列表中生成dict
一个元组(w1,w2),值为w3,其中w1,w2和w3
是组成每行的3个单词。
"""
d={}
对于行中的行:
elts=行。拆分()
断言(len(elts)=3)
d[元组(elts[:2])]=elts[2]
返回d
def get_数据(数据):
“”“将dict中的数据恢复为字符串列表。
列表中每个元素的格式如下所示:
k[0]k[1]v
其中k和v是数据指令的键/值。
"""
行=[]
对于data.items()中的k,v:
行=列表(k)
行+=[v',\n']
行.附加(“”.join(行))
回程线
def更新数据(输出数据、新数据):
“”“使用新数据更新数据记录”
如果键已存在,则会追加这些值。
否则将创建一个新的键/值对。
"""
对于新项目()中的k,v:
如果输出中的k\u d:
输出d[k]=''.join([output d[k],v])
其他:
输出d[k]=v
对于('data1','data2','data3')中的数据_文件:
打开(数据_文件)作为f:
d1=读取数据(f.readlines())
更新数据(输出指令,d1)
打印(“转储数据”,输出命令)
打开(转储,“wb”)作为f:
pickle.dump(输出指令,f)
打印(“写入数据”)
打开(输出“w”)作为f:
f、 写入('\n'.join(获取数据(输出命令)))

您必须同时读取这两个文件。然后将第一个文件的行附加到第二个文件的行。但不能将结果行写入第二个文件。所以您需要第三个文件来保存file1+file2的输出…谢谢您的评论。看来这真的接近解决方案了。但是我得到了这个错误:
转储数据{('1','xxx'):'82%55%44%,('2','yyy'):'6%2%3%,('3','zzz'):'1%2%4%}正在写数据回溯(最近一次调用最后一次):文件“test.py”,第59行,在f.write('.join(get_data(output_dict)))TypeError:只能加入一个iterable
我忘记了
get\u data
中的返回语句。我编辑了我的答案。这次:
f.write(''.join(get_data(output_dict)))TypeError:sequence item 0:expected str instance,list find
我的测试输入是三个名为data1,2,3的文件,内容如下:
1。xxx 82/55/44%2。yyy 6/2/3%3。zzz 1/2/4%
我也在尝试修复。谢谢。对不起,我修正了密码。在我测试的第一个版本中,
get_data
没有返回任何内容,而是将行写入文件。我没有经过适当的测试就改变了这个。现在应该可以了。非常感谢你的努力。在最后一步中,我还设法使它与For循环一起工作:
将open(output,'w')作为f:For I in get_data(output_dict):For j in I:f.write(''+j)
import os

os.chdir("directory")

f = open("data1", "r")

n=3

a = f.readlines()
b = []

for i in range(n):
    b.append(a[i].split(" ")[2])

file_lines = []

with open("data1", 'r') as f:
    for t in range(n):
        for x in f.readlines():
            file_lines.append(''.join([x.strip(), b[t], '\n']))
            print(b[t])

with open("data2", 'w') as f:
    f.writelines(file_lines)