看过电视剧《开端》的都知道,处在循环中是多么让人崩溃的事情,循环能够制作问题,但循环同样能够解决问题。现在咱们要讲的这个事例便是使用循环来完成的。

****事例说明: 有一个excel文档,一列记录的是文件名,另一列记录的是文件中要填充的文件内容。需求读取对应的文件内容,存入对应的表名中。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

剖析说明:文件结构如图所示

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

想要完成终究的成果,首先是需求循环读取文件内容,然后是把读取到的内容循环存入文件。要强调的是这里涉及到的循环并不是嵌套循环,而是两轮 独立 的循环。

下面是用pandas完成过程

import pandas as pd
excel_file='/Users/airc/Desktop/TEST.xlsx'
target_path='/Users/airc/Desktop/方针文件夹/'
read_excel=pd.read_excel(excel_file,sheet_name='输出文件内容')
print(read_excel)

print成果

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

过错示范

新手往往会这么去遍历和贮存,这么单看好像并没有问题,由于确实’a‘的值便是遍历出来一切文件名,file存储的时分,也并没有报错,可是终究一看成果就炸了。

table_name=read_excel['文件名']
table_content=read_excel['文件内容']
for a in table_name:
    print(a)
for b in table_content:
    file=open(target_path+a,'w+')
    file.write(b)
    file.close()

终究的整个文件只保存了test5.txt的内容。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

这是为什么呢?百思不得解,唯有debug。

过错原因

咱先看一下存储文件时发生了什么,把断点放在file.open这里的时分,能够看到文件内容的循环‘b’在遍历循环的同时,存储文件名的‘a’的成果始终都是test5.txt

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

而终究a的成果为什么只要test5.txt的内容呢?咱再看下第一个for 循环终究给a传的值终究是什么,当把断点放在print(a)的位置,当一个for 循环遍历结束时看到终究打印出是‘test5.txt’。

这也就说通了,第一个循环遍历结束时,并不是把一切table_name传给了a,而仅仅把遍历终究的成果传给了a,所以终究也就只要test5.txt贮存了。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)


那么问题的关键就在于,怎么解决双层循环中传值的问题。

正确思路

首先取出来的两列serise类型转换成list,便利下一步进行遍历操作。

table_name=read_excel['文件名'].to_list()
table_content=read_excel['文件内容'].to_list()

这是比较关键的一步,进行table_name遍历操作时,同时把table_name的索引取出来,而且需求把遍历出来a的值追加到界说的空列表里,这样name的成果里装的便是一切table_name的值。

name=[]#界说空列表
for index1,a in enumerate(table_name):#enumerate:遍历列表时带上索引,
    #index1即索引,a即是values
    name.append(a)#把每一次遍历的a的值追加到name列表里

这个时分再debug就会发现 :列表name里装的是一切需求贮存的文件名。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

经过上一步把一切的文件名进行了列表存储之后,接着咱就到了咱的终究意图,把文件内容存到对应的文件名中

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)
(终究意图)

for index2,b in enumerate(table_content):#同理enumerate:index2即索引,b即是values
    file=open(target_path+name[index2],'w+')
    file.write(b)
    file.close()

此刻的name是个列表,此刻的index2是table_content的索引,当遍历存储的时分,name的取值是索引对应的文件名。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

这是终究想要达到的作用。

一篇文章讲透python双层独立循环(--附案例(python如何实现循环存放文件)

总结一下:python在进行双层独立的循环的时分,是先走完第一层循环,遍历的成果是元素的终究一个值,如果第二层循环是接收不到第一层循环一切的值的,只要把第一层循环的值进行列表追加,第二层循环在用的时分再按索引的顺序取值,才干接受到一切第一层循环的值。