[英]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':
:。
而且,在进行此操作时,这意味着您可以直接在JobSize
和Iteration
列表上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:
如果JobSize
和Iteration
的元素不是字符串,则最后一个版本将不起作用-但是如果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.