⑴ python或者bat怎麼遍歷文件夾下所有文件和文件夾然後修改後綴
先遍歷所有文件:
fromosimportwalk
f=[]
for(dirpath,dirnames,filenames)inwalk(mypath):
f.extend(filenames)
break
⑵ 如何利用Python遍歷文件夾
importos
forroots,dirs,filesinos.walk('.',topdown=True):
roots是所有的上層路徑
dirs是所有的目錄
files是所有的文件名
⑶ python如何實現for循環操作文件
python用for循環遍歷文件操作,代碼如下:
#!ursinenvpython
#encoding:utf-8#設置編碼方式
importos
importre
classloop_file:
def__init__(self,root_dir,short_exclude=[],long_exclude=[],file_extend=[]):
self.root_dir=root_dir
self.short_exclude=short_exclude
self.long_exclude=long_exclude
self.file_extend=file_extend
def__del__(self):
pass
defstart(self,func):
self.func=func
returnself.loop_file(self.root_dir)
defloop_file(self,root_dir):
t_sum=[]
sub_gen=os.listdir(root_dir)
forsubinsub_gen:
is_exclude=False
forextendsinself.short_exclude:##在不檢查文件、目錄范圍中
ifextendsinsub:##包含特定內容
is_exclude=True
break
ifre.search(extends,sub):##匹配指定正則
is_exclude=True
break
ifis_exclude:
continue
abs_path=os.path.join(root_dir,sub)
is_exclude=False
forexcludeinself.long_exclude:
ifexclude==abs_path[-len(exclude):]:
is_exclude=True
break
ifis_exclude:
continue
ifos.path.isdir(abs_path):
t_sum.extend(self.loop_file(abs_path))
elifos.path.isfile(abs_path):
ifnot"."+abs_path.rsplit(".",1)[1]inself.file_extend:##不在後綴名檢查范圍中
continue
t_sum.append(self.func(abs_path))
returnt_sum
if'__main__'==__name__:
root_dir=r'D:harness ewshoppingcart estcasepromosingle_promo'
short_exclude=['.svn','.*_new.rb']###不包含檢查的短目錄、文件
long_exclude=[]###不包含檢查的長目錄、文件
file_extend=['.rb']###包含檢查的文件類型
lf=loop_file(root_dir,short_exclude,long_exclude,file_extend)
forfinlf.start(lambdaf:f):
printf
⑷ 如何利用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怎麼遍歷指定文件
監控目錄 -- 分兩個部分: 1. 掃描目錄文件, 保持當前狀態數據; 2. 狀態數據的比較
importos
importfnmatch
defgetfileinfo(filename):
(mode,ino,dev,nlink,
uid,gid,size,atime,mtime,ctime)=os.stat(filename)
returndict(
modifytime=mtime,
createtime=ctime,
size=size,
)
classDirectoryMonitor(object):
def__init__(self,path,fnexp="*.*"):
self.path=path
self.fnexp=fnexp
self.files={}
self.scan()
defscan(self):
currentfiles={}
forpath,dirs,filesinos.walk(self.path):
forfinfnmatch.filter(files,self.fnexp):
fullname=os.path.join(path,f)
currentfiles[fullname]=getfileinfo(fullname)
lastfiles=self.files
self.files=currentfiles
returnself.check(lastfiles,currentfiles)
@staticmethod
defcheck(lastfiles,currfiles):
monitor={}
newer={}
forfinset(currfiles)-set(lastfiles):
newer[f]=currfiles[f]
ifnewer:
monitor["newer"]=newer
deleted={}
forfinset(lastfiles)-set(currfiles):
deleted[f]=lastfiles[f]
ifdeleted:
monitor["deleted"]=deleted
changed={}
forfinset(lastfiles)&set(currfiles):
iflastfiles[f]!=currfiles[f]:
changed[f]=currfiles[f]
ifchanged:
monitor["changed"]=changed
returnmonitor
deftester():
importtime
dm=DirectoryMonitor(r"/home/tim/data","*.txt")
time.sleep(20)
m=dm.scan()
ifm:
printm
if__name__=="__main__":
tester()
⑹ 如何用python遍歷文件夾下的所有excel文件
大數據處理經常要用到一堆表格,然後需要把數據導入一個list中進行各種演算法分析,簡單講一下自己的做法:
1.如何讀取excel文件
網上的版本很多,在xlrd模塊基礎上,找到一些源碼:
[python]view plain
importxdrlib,sys
importxlrd
defopen_excel(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.xlsx"):
data=xlrd.open_workbook(file)
returndata
#根據索引獲取Excel表格中的數據參數:file:Excel文件路徑colnameindex:表頭列名所在行的所以,by_index:表的索引
defexcel_table_byindex(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.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=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
#根據名稱獲取Excel表格中的數據參數:file:Excel文件路徑colnameindex:表頭列名所在行的所以,by_name:Sheet1名稱
defexcel_table_byname(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.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=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
defmain():
tables=excel_table_byindex()
forrowintables:
print(row)
tables=excel_table_byname()
forrowintables:
print(row)
if__name__=="__main__":
main()
最後一句讓代碼里的函數都可以被復用,簡單地說:假設文件名是a,在程序中import a以後,就可以用a.excel_table_byname()和a.excel_table_byindex()這兩個超級好用的函數了。
2.然後是遍歷文件夾取得excel文件以及路徑:,原創代碼如下:
[python]view plain
importos
importxlrd
importtest_wy
xpath="E:/唐偉捷/電力/電力系統總文件夾/舟山電力"
xtype="xlsx"
typedata=[]
name=[]
raw_data=[]
file_path=[]
defcollect_xls(list_collect,type1):
#取得列表中所有的type文件
foreach_elementinlist_collect:
ifisinstance(each_element,list):
collect_xls(each_element,type1)
elifeach_element.endswith(type1):
typedata.insert(0,each_element)
returntypedata
#讀取所有文件夾中的xls文件
defread_xls(path,type2):
#遍歷路徑文件夾
forfileinos.walk(path):
foreach_listinfile[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文件路徑並讀取數據
forevey_nameinall_xls:
xls_data=xlrd.open_workbook(evey_name)
foreach_sheetinxls_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,":Datahasbeendone.")
returnraw_data
a=read_xls(xpath,xtype)
print("Victory")
⑺ 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:
... print root, fn
...
>>> fun( r'C:\TDDOWNLOAD' )
C:\TDDOWNLOAD a.txt
C:\TDDOWNLOAD b.txt
C:\TDDOWNLOAD\sub1 c.txt
C:\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:
... print fn
...
>>> fun( r'C:\TDDOWNLOAD' )
C:\TDDOWNLOAD\a.txt
C:\TDDOWNLOAD\b.txt
C:\TDDOWNLOAD\sub1\c.txt
C:\TDDOWNLOAD\sub1\d.txt
>>>
'*'為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來,以便遞歸深入,探查下一層的文件。
⑻ 求助 python循環讀取文件內容
讀取文件練習
⑼ 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解
文中使用到了Python os模塊和Python sys模塊,這兩個模塊具體的使用方法請參考玩蛇網相關文章閱讀。
Python os.path.walk方法遍歷文件搜索內容方法代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os, sys
#代碼中需要用到的方法模塊導入
listonly = False
skipexts = ['.gif', '.exe', '.pyc', '.o', '.a','.dll','.lib','.pdb','.mdb'] # ignore binary files
def visitfile(fname, searchKey):
global fcount, vcount
try:
if not listonly:
if os.path.splitext(fname)[1] in skipexts:
pass
elif open(fname).read().find(searchKey) != -1:
print'%s has %s' % (fname, searchKey)
fcount += 1
except: pass
vcount += 1
#www.iplaypy.com
def visitor(args, directoryName,filesInDirectory):
for fname in filesInDirectory:
fpath = os.path.join(directoryName, fname)
if not os.path.isdir(fpath):
visitfile(fpath,args)
def searcher(startdir, searchkey):
global fcount, vcount
fcount = vcount = 0
os.path.walk(startdir, visitor, searchkey)
if __name__ == '__main__':
root=raw_input("type root directory:")
key=raw_input("type key:")
searcher(root,key)
print 'Found in %d files, visited %d' % (fcount, vcount)
⑽ 如何利用Python遍歷文件夾
1. 基本實現
[root@localhost ~]# cat dirfile.py
import os
path='/tmp'for dirpath,dirnames,filenames in os.walk(path): for file in filenames:
fullpath=os.path.join(dirpath,file) print fullpath
執行結果如下:
[root@localhost ~]# python dirfile.py
/tmp/yum.log/tmp/pulse-3QSA3BbwpQ49/pid/tmp/pulse-3QSA3BbwpQ49/native/tmp/.esd-0/socket
2. 在上例的基礎上傳遞參數
import os,sys
path=sys.argv[1]for dirpath,dirnames,filenames in os.walk(path): for file in filenames:
fullpath=os.path.join(dirpath,file) print fullpath
執行方式為:[root@localhost ~]# python dirfile.py /tmp
在這里,sys.argv[1]是接受參數,也可以定義sys.argv[2]接受第二個參數
3. 如何用函數實現
PS:
1> def __init__():函數,也叫初始化函數。
self.path = path可以理解為初始化定義了1個變數。 在後面的def裡面調用的時候必須要使用self.path而不能使用path
2>__name__ == '__main__'
模塊是對象,並且所有的模塊都有一個內置屬性 __name__。一個模塊的 __name__ 的值取決於您如何應用模塊。如果 import 一個模塊,那麼模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴展名。但是您也可以像一個標準的程序樣直接運行模塊,在這種情況下, __name__ 的值將是一個特別預設"__main__"。上述類中加上__name__ == '__main__'的判斷語句,可以直接在終端環境下執行python dirfile.py /tmp進行測試,不必非得在互動式環境下導入模塊進行測試。