“ for”循环在python 3.6中不起作用

危机

我一直在努力结合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;

马丁·彼得斯(Martijn Pieters)

您试图多次遍历文件对象。文件对象就像长条磁带一样,读取一行或一行将移动文件指针,即下一次读取或写入的位置。读取完整个文件后,该指针位于文件“ tape”的最后,您无法从该位置读取更多信息(那里没有更多数据),直到通过其他方式再次移动文件指针。

每次要循环时您都需要打开文件对象,或者将文件指针后退到起点。您可以通过file.seek(0)致电进行后者

但是,一次又一次地读取文件很慢。由于您所做的全部工作都是将这些多余的文件用作映射(将一个值连续映射到另一个值),因此您实际上应该将它们读入内存并放入字典中。这样,你就不必循环可言,并且使你的代码了,在这个过程中要快得多。

您还应该使用csv模块,而不要拆分自己。在引号和其他特殊情况下,该模块可以更有效,更正确地处理读取和拆分:

import csv
import sys

with open(filename2, 'r', newline='') as file2:
    reader = csv.reader(file2, delimiter=';')
    file2_map = dict(row[:2] for row in reader)

with open(filename3, 'r', newline='') as file3:
    reader = csv.reader(file3, delimiter=';')
    file3_map = dict(row[:2] for row in reader)

with open(filename1, 'r', newline='') as file1:
    reader = csv.reader(file1, delimiter=';')
    writer = csv.writer(sys.stdout, delimiter=';')
    for dz1, dz2, *remainder in reader:
        wl1 = file2_map.get(dz1, '')
        wl2 = file2_map.get(dz2, '')
        kw1 = file3_map.get(dz1, '')
        kw2 = file3_map.get(dz2, '')
        writer.writerow([dz1, dz2, wl1, wl2, kw1, kw2])

当您还要写出以分号分隔的信息时,可以使用同一csv模块来生成一个csv.writer()对象,以再次写出数据。在上面的示例中,我将写入sys.stdout,但是您可以写入任何您喜欢的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

For 循环在 python 3 中不起作用

来自分类Dev

For循环在D3.js中不起作用

来自分类Dev

为什么相对导入在Python 3中不起作用?

来自分类Dev

HyperVolume函数在Python 3中不起作用

来自分类Dev

python3-cd在反向shell中不起作用

来自分类Dev

为什么相对导入在Python 3中不起作用?

来自分类Dev

HyperVolume函数在Python 3中不起作用

来自分类Dev

日志在 Python 3 中的 Flask 下不起作用

来自分类Dev

unicode 方法在 Python3 中不起作用

来自分类Dev

For循环在python函数中不起作用

来自分类Dev

Python 3中的循环

来自分类Dev

pwntools Python模块在python2中不起作用,但在python3中起作用

来自分类Dev

Python3请求-不起作用

来自分类Dev

python 3 suds缓存不起作用

来自分类Dev

Python 3绝对导入不起作用

来自分类Dev

python 3导入不起作用

来自分类Dev

Python3请求-不起作用

来自分类Dev

Python 3更改for循环中字典键的值不起作用

来自分类Dev

PYTHON_TARGETS中的python3_5在Gentoo中不起作用?

来自分类Dev

在python2中可以,但是在python3中不起作用

来自分类Dev

While循环仅创建3个对象不起作用

来自分类Dev

Slim 3 重定向路由循环不起作用

来自分类Dev

为什么函数参数中的元组分配在python3中不起作用

来自分类Dev

在Python 3中比较字典中的值不起作用?

来自分类Dev

Python 3 帮助功能中的西里尔字母在 Powershell Windows 10 中不起作用

来自分类Dev

Python 3 中的异步 for 循环

来自分类Dev

在循环中调用函数在Python中不起作用

来自分类Dev

循环中的Readline()在python中不起作用

来自分类Dev

在python中循环并创建JSON文件的函数不起作用