python循环文件夹下的全部文件(python循环文件夹下的全部文件怎
如何利用Python遍历文件夹
import os
import os.path
rootdir = “d:\data” # 指明被遍历的文件夹
for parent,dirnames,filenames in os.walk(rootdir): #三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for dirname in dirnames: #输出文件夹信息
print "parent is:" + parent
print "dirname is" + dirname
for filename in filenames: #输出文件信息
print "parent is": + parent
print "filename is:" + filename
print "the full name of the file is:" + os.path.join(parent,filename) #输出文件路径信息
#windows下为:d:\data\query_text\EL_00154
Python中如何遍历指定目录下的所有文件?
例如:在C:\TDDOWNLOAD目录下有a.txt、b.txt两个文件,另有\sub1子文件夹,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt两个文件。
1.
os.walk
os.walk()返回一个三元素的tuple:当前路径、子文件夹名称、文件列表。
import
os
def
fun(
path
):...
for
root,
dirs,
files
in
os.walk(
path
):...
for
fn
in
files:...
root,
fn...
fun(
r'C:\TDDOWNLOAD'
)C:\TDDOWNLOAD
a.txtC:\TDDOWNLOAD
b.txtC:\TDDOWNLOAD\sub1
c.txtC:\TDDOWNLOAD\sub1
d.txt
2.
glob.glob
glob.glob()只接受一个参数,这个参数既代有路径,又代有匹配模式,返回值为一个列表。注意,glob.glob()无法直接穿透子文件夹,需要自己处理:
def
fun(
path
):...
for
fn
in
glob.glob(
path
+
os.sep
+
'*'
):
#
'*'代表匹配所有文件...
if
os.path.isdir(
fn
):
#
如果结果为文件夹...
fun(
fn
)
#
递归...
else:...
fn...
fun(
r'C:\TDDOWNLOAD'
)C:\TDDOWNLOAD\a.txtC:\TDDOWNLOAD\b.txtC:\TDDOWNLOAD\sub1\c.txtC:\TDDOWNLOAD\sub1\d.txt
'*'为匹配模式,代表匹配所有文件,只有这样才能将子文件夹查出来,以便递归深入,探查下一层的文件。
如何用python遍历文件夹下的所有excel文件
大数据处理经常要用到一堆表格,然后需要把数据导入一个list中进行各种算法分析,简单讲一下自己的做法:
1.如何读取excel文件
网上的版本很多,在xlrd模块基础上,找到一些源码:
[python]?view plain?copy
import??xdrlib?,sys
import?xlrd
def?open_excel(file="C:/Users/flyminer/Desktop/新建?Microsoft?Excel?工作表.xlsx"):
data?=?xlrd.open_workbook(file)
return?data
#根据索引获取Excel表格中的数据???参数:file:Excel文件路径?????colnameindex:表头列名所在行的所以??,by_index:表的索引
def?excel_table_byindex(file="C:/Users/flyminer/Desktop/新建?Microsoft?Excel?工作表.xlsx",colnameindex=0,by_index=0):
data?=?open_excel(file)
table?=?data.sheets()[by_index]
nrows?=?table.nrows?#行数
ncols?=?table.ncols?#列数
colnames?=??table.row_values(colnameindex)?#某一行数据
list?=[]
for?rownum?in?range(1,nrows):
row?=?table.row_values(rownum)
if?row:
app?=?{}
for?i?in?range(len(colnames)):
app[colnames[i]]?=?row[i]
list.append(app)
return?list
#根据名称获取Excel表格中的数据???参数:file:Excel文件路径?????colnameindex:表头列名所在行的所以??,by_name:Sheet1名称
def?excel_table_byname(file="C:/Users/flyminer/Desktop/新建?Microsoft?Excel?工作表.xlsx",colnameindex=0,by_name=u'Sheet1'):
data?=?open_excel(file)
table?=?data.sheet_by_name(by_name)
nrows?=?table.nrows?#行数
colnames?=??table.row_values(colnameindex)?#某一行数据
list?=[]
for?rownum?in?range(1,nrows):
row?=?table.row_values(rownum)
if?row:
app?=?{}
for?i?in?range(len(colnames)):
app[colnames[i]]?=?row[i]
list.append(app)
return?list
def?main():
tables?=?excel_table_byindex()
for?row?in?tables:
print(row)
tables?=?excel_table_byname()
for?row?in?tables:
print(row)
if?__name__=="__main__":
main()
最后一句是重点,所以这里也给代码人点个赞!
最后一句让代码里的函数都可以被复用,简单地说:假设文件名是a,在程序中import a以后,就可以用a.excel_table_byname()和a.excel_table_byindex()这两个超级好用的函数了。
2.然后是遍历文件夹取得excel文件以及路径:,原创代码如下:
[python]?view plain?copy
import?os
import?xlrd
import?test_wy
xpath="E:/唐伟捷/电力/电力系统总文件夹/舟山电力"
xtype="xlsx"
typedata?=?[]
name?=?[]
raw_data=[]
file_path=[]
def?collect_xls(list_collect,type1):
#取得列表中所有的type文件
for?each_element?in?list_collect:
if?isinstance(each_element,list):
collect_xls(each_element,type1)
elif?each_element.endswith(type1):
typedata.insert(0,each_element)
return?typedata
#读取所有文件夹中的xls文件
def?read_xls(path,type2):
#遍历路径文件夹
for?file?in?os.walk(path):
for?each_list?in?file[2]:
file_path=file[0]+"/"+each_list
#os.walk()函数返回三个参数:路径,子文件夹,路径下的文件,利用字符串拼接file[0]和file[2]得到文件的路径
name.insert(0,file_path)
all_xls?=?collect_xls(name,?type2)
#遍历所有type文件路径并读取数据
for?evey_name?in?all_xls:
xls_data?=?xlrd.open_workbook(evey_name)
for?each_sheet?in?xls_data.sheets():
sheet_data=test_wy.excel_table_byname(evey_name,0,each_sheet.name)
#请参考读取excel文件的代码
raw_data.insert(0,?sheet_data)
print(each_sheet.name,":Data?has?been?done.")
return?raw_data
a=read_xls(xpath,xtype)
print("Victory")
欢迎各种不一样的想法~~
python遍历目录就是这么简单
有时我们有列出目录下都有哪些文件和子目录的需求,这种情况是有现成命令可用的,比如windows下的dir命令,linux下的ls命令都可以,那我们用python代码怎么实现呢?
我们利用python丰富的库很容易就能实现一个简易版本,下面我们就用4种方法来实现它。
一、使用os.popen
os.popen工作原理是新建一个子进程,然后用这个子进程执行命令,父进程与子进程间通过管道进行通信。
根据调用popen时的传参,我们可以通过管道读取子进程的输出也可以向子进程写数据,默认是读取子进程的输出。
从以上描述可以看出popen是非常通用的,不是只能用于我们这个例子哦。
那我们开始用它实现我们的需求吧,代码如下:
哈哈,是不是很简单,这种方式虽然能达到目的但其实并不是我们想要的,我们本来就是要实现ls的,结果调用了ls,所以严格意义上来说我们并没有实现ls,那让我们继续往下看其它方法吧,嘿嘿。
二、使用glob.glob
glob可以根据你使用的通配符对文件进行匹配,利用这个特性我们可以列出当前目录下都有哪些文件和子目录,如下代码:
三、使用os.listdir
os.listdir同样可以列出某个目录下都有哪些文件和子目录,如下代码:
四、使用os.walk
os.walk在遍历目录方面非常强大,它不但可以遍历你需要的目录,也可以递归遍历子目录且递归的深度可以用代码控制,下面让我们分别看下怎么遍历整个目录树以及怎么控制深度吧。
os.walk默认是遍历整个目录树的,如下代码就会递归打印出当前目录下所有文件:
那我们怎么控制遍历的深度,比如只遍历n层呢?其实很简单,只需要定义一个深度变量,然后到达n后跳出循环即可,如下代码就只遍历1层:
至此我们已经写完4种方法了,如果你还有其他方法,欢迎评论交流。
Python使用for循环依次打开该目录下的各文件
import?os
path?=?r"F:\Python\第一周作业\task"
otherpath=r"F:\Python\其它目录"
for?filename?in?os.listdir(path):
????print(path,filename)
????fullname=os.path.join(path,filename)
????if?os.path.isfile(fullname):????????
??????????othername=os.path.join(otherpath,filename)??
??????????otherfile=open(othername,'wb')
??????????for?line?in?open(fullname,'rb'):
??????????????for?c?in?line:
??????????????????if?not?c.isdigit():otherfile.write(c)
??????????otherfile.close()