繁体   English   中英

如何在csv阅读器python中迭代字符

[英]How to iterate character in csv reader python

我有许多文本文件(.txt),第一个文件名为1_1_A_A,最后一个文件名为10_10_B_C。 名称中的第一个元素从1到10,第二个也从1到10,第三个可以是A或B,第四个可以是A,B或C。总共有600个实例。 我希望python使用CSV阅读器阅读它们。 对于前两个元素,我在两个循环中使用了%s ,它可以正常工作。 但是我应该怎么做才能迭代第三和第四位的字符?

代码是这样的,迭代了两个元素:

for i in range (len(JobSize)):
    for j in range(len(Iteration)):
        with open('%s_%s_A_A.txt' % (JobSize[i], Iteration[j]), 'rt') as Data:
            reader = csv.reader(Data, delimiter='\t')

您可以用相同的方式遍历任何迭代。 它不必是一个range ; for i in range(3):中的for i in [1, 2, 3]:相同for i in [1, 2, 3]: 值不必是整数,您可以for i in ['A', 'B', 'C'] 或者,更简单地说,字符串本身就是字符的可迭代对象,因此for i in 'ABC': :。

而且,在进行此操作时,这意味着您可以直接在JobSizeIteration列表上JobSize Iteration 不用for i in range(len(JobSize)):中使用for i in range(len(JobSize)):然后在JobSize[i]for i in JobSize:使用i直接使用i

所以:

for i in JobSize:
    for j in Iteration:
        for k in 'AB':
            for l in 'ABC':
                with open('%s_%s_%s_%s.txt' % (i, j, k, l), 'rt') as Data:

但是,四个层次的嵌套非常难看,将您的代码推离屏幕的右边缘。 您可能会发现product更好:

大致相当于嵌套的for循环…嵌套的循环就像里程表一样循环,最右边的元素在每次迭代中都前进。

换句话说,这与上述操作完全相同:

import itertools
for i, j, k, l in itertools.product(JobSize, Iteration, 'AB', 'ABC'):
    with open('%s_%s_%s_%s.txt' % (i, j, k, l), 'rt') as Data:

或者,甚至更简单:不使用元组拆包来获取独立的i, j, k, l变量,只需将其保留为单个ijkl并将其传递给join

for ijkl in itertools.product(JobSize, Iteration, 'AB', 'ABC'):
    with open('_'.join(ijkl), 'rt') as Data:

如果JobSizeIteration的元素不是字符串,则最后一个版本将不起作用-但是如果map它们全部map到字符串,则它与%s

for ijkl in itertools.product(JobSize, Iteration, 'AB', 'ABC'):
    with open('_'.join(map(str, ijkl)), 'rt') as Data:

当然,您可能想提出一个比ijkl更好的名称。 也许是name_components

您可以遍历任何可迭代项,包括以下字符串:

码:

for i in range(1, 4):
    for j in 'abc':
        print('{}_{}'.format(i, j))

结果:

1_a
1_b
1_c
2_a
2_b
2_c
3_a
3_b
3_c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM