【发布时间】:2017-02-10 07:22:33
【问题描述】:
我一直致力于合并 3 个文本文件。
在第一个文件中,我有成对的字符串(不是 int)
在第二个文件中,我有来自文件 1 的字符串定义
在第三个中,第一个文件中的字符串还有另一个定义(也是字符串)
我的代码是:
for line1 in file1:
wl1 = ''
wl2 = ''
kw1 = ''
kw2 = ''
dz1, dz2, none = line1.split(';')
for line2 in file2:
dz_wl, wl, none = line2.split(';')
if str(dz_wl) == str(dz1):
wl1 = wl
elif str(dz_wl) == str(dz2):
wl2 = wl
for line3 in file3:
dz_kw, kw, none = line3.split(';')
if str(dz_kw) == str(dz1):
kw1 = kw
elif str(dz_kw) == str(dz2):
kw2 = kw
print(dz1 + ';' + wl1 + ';' + kw1 + ';' + dz2 + ';' + wl2 + ';' + kw2 + '\n')
它似乎至少可以工作一次,因为它为第一行打印了正确的结果 结果:
1;a;123;2;b;4124
2;;;3;;
4;;;5;;
6;;;7;;
6;;;8;;
9;;;1;;
7;;;1;;
7;;;3;;
6;;;4;;
7;;;10/2;;
10/2;;;10/1;;
12;;;13;;
11;;;3;;
要改变什么,以使代码适用于每一行?
file1 包含:
1;2;
2;3;
4;5;
6;7;
6;8;
9;1;
7;1;
7;3;
6;4;
7;10/2;
10/2;10/1;
12;13;
11;3;
文件2:
1;a;
2;b;
3;c;
4;d;
5;e;
6;f;
7;g;
8;h;
9;i;
10/1;j;
10/2;k;
11;l;
12;m;
13;n;
文件3:
1;123;
2;321;
3;554;
4;3313;
5;334;
6;564;
7;3234;
8;56345;
9;2346;
10/1;342;
10/2;553;
11;23;
12;453;
13;2234;
【问题讨论】:
-
如果不将文件对象“倒回”到
file.seek(0)的开头,您将无法多次循环文件对象。但是,您最好在循环之前将文件完全读入内存。 -
您在这里重新发明了字符分隔文件阅读轮。使用
csv模块;reader = csv.reader(fileobj, delimiter=';')会给你完整的解析行。all_rows = list(reader)会将其读入内存。 -
你能发帖吗,你会如何更改我的代码?我对 python 还很陌生
-
我不明白您的结果中的第一行是如何创建的。将所有文件读入一个字符串列表并使用索引为初学者提取相关数据可能是最简单的。
标签: python list python-3.x for-loop text-files