python3文件操作程序_Python3操作文件,目录和路径

1.遍历文件夹和文件

Python代码 554562d0c2002d8ce9d279a0ac4b8af0.gif 027a5b82adf8f0d5485ec74a00cb8cf0.png

02fee9d12417b7192042af4286eea62d.gif

importos

importos.path

rootdir ="d:/test"

forparent,dirnames,filenamesinos.walk(rootdir):

# case 1:

fordirnameindirnames:

print("parent is:"+ parent)

print(" dirnames is:"+ dirname)

# case 2:

forfilenameinfilenames:

print(" parent is:"+ parent)

print(" filename with full path:"+ os.path.join(parent,filename))

import os

import os.path

rootdir = "d:/test"

for parent,dirnames,filenames in os.walk(rootdir):

# case 1:

for dirname in dirnames:

print ( "parent is:" + parent)

print ( " dirnames is:" + dirname)

# case 2:

for filename in filenames:

print ( " parent is:" + parent)

print ( " filename with full path:" + os.path.join(parent,filename))

引用

知识点:

1. os.walk 返回一个三元组,其中dirnames是所有文件夹名字,filenames是所有文件的名字,parent表示父目录。

2. case 1 演示如何遍历所有目录

3. case 2 演示如何遍历所有文件

4. os.path.join(dirname,filename):将"/test/java"和"helloworld.java"变成/test/java/helloworld.java

2.复制文件

Python代码 554562d0c2002d8ce9d279a0ac4b8af0.gif 027a5b82adf8f0d5485ec74a00cb8cf0.png

02fee9d12417b7192042af4286eea62d.gif

importshutil

importos

importos.path

src ="d:\\test\\test1.txt"

dst ="d:\\test\\test2.txt"

dst2 ="d:/test/test.txt"

dir1 = os.path.dirname(src)

print("dir1 %s"%s dir1)

if(os.path.exists(src) ==False):

os.makedirs(dir1)

f1 = open(src," w")

f1.write("line a\n")

f1.write("line b\n")

f1.close();

shutil.copy(src,dst)

shutil.copyfile(src,dst2)

f2 = open(dst," r ")

forlineinf2:

print(line)

f2.close()

#测试复制文件夹树

try:

srcDir ="d:/test1"

dstDir ="d:/test2"

# 如果dstDir已经存在,那么shutil.copytree方法会报错

# 这也意味着你不能直接用d:作为目标路径

shutil.copytree(srcDir,dstDir)

exceptException as err:

print(err)

import shutil

import os

import os.path

src = "d:\\test\\test1.txt"

dst = "d:\\test\\test2.txt"

dst2 = "d:/test/test.txt"

dir1 = os.path.dirname(src)

print ("dir1 %s" %s dir1)

if(os.path.exists(src) == False):

os.makedirs(dir1)

f1 = open(src," w")

f1.write( "line a\n" )

f1.write( "line b\n" )

f1.close();

shutil.copy(src,dst)

shutil.copyfile(src,dst2)

f2 = open(dst," r ")

for line in f2:

print(line)

f2.close()

#测试复制文件夹树

try:

srcDir = "d:/test1"

dstDir = "d:/test2"

# 如果dstDir已经存在,那么shutil.copytree方法会报错

# 这也意味着你不能直接用d:作为目标路径

shutil.copytree(srcDir,dstDir)

except Exception as err:

print (err)

引用

知识点:

1. shutil.copyfile:如何复制文件

2. os.path.exists: 如何判断文件夹是否存在

3. shutil.copytree: 如何复制目录树

3.分割路径和文件名

Python代码 554562d0c2002d8ce9d279a0ac4b8af0.gif 027a5b82adf8f0d5485ec74a00cb8cf0.png

02fee9d12417b7192042af4286eea62d.gif

importos.path

#常用函数有三种:分隔路径,找出文件名,找出盘符(window系统),找出文件的扩展名。

spath ="d:/test/test.7z"

# case 1:

p,f = os.path.split(spath);

print("dir is:"+ p)

print(" file is:"+ f)

# case 2:

drv,left = os.path.splitdrive(spath);

print(" driver is:"+ drv)

print(" left is:"+ left)

# case 3:

f,ext = os.path.splitext(spath);

print(" f is: "+ f)

print(" ext is:"+ ext)

import os.path

#常用函数有三种:分隔路径,找出文件名,找出盘符(window系统),找出文件的扩展名。

spath = "d:/test/test.7z"

# case 1:

p,f = os.path.split(spath);

print ( "dir is:" + p)

print ( " file is:" + f)

# case 2:

drv,left = os.path.splitdrive(spath);

print ( " driver is:" + drv)

print ( " left is:" + left)

# case 3:

f,ext = os.path.splitext(spath);

print ( " f is: " + f)

print ( " ext is:" + ext)

引用

知识点:

1. 这是哪个函数都返回二元组

2. case1 分隔目录和文件名

3. case2 分隔盘符和文件名

4. case3 分隔文件和扩展名

函数总结

引用

1. os.walk(spath)

2. os.path.split(spath)

3. os.path.splitdrive(spath)

4. os.path.splitext(spath)

5. os.path.join(path1,path2)

6. os.path.dirname(path)

7. os.path.exists(path)

8. shutil.copyfile(src, dst)

9. shutil.copytree(srcDir, dstDir)

文件备份程序

Python代码 554562d0c2002d8ce9d279a0ac4b8af0.gif 027a5b82adf8f0d5485ec74a00cb8cf0.png

02fee9d12417b7192042af4286eea62d.gif

importos

importshutil

importdatetime

'''''

作用:将目录备份到其他路径。

实际效果:

假设给定目录"/media/data/programmer/project/python" ,

备份路径"/home/diegoyun/backup/“ ,

则会将python目录备份到备份路径下,形如:

/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz..

用法:更改这两个参数.

backdir:备份目的地.

copydirs:想要备份的文件夹.

'''

defmainLogic():

# add dirs you want to copy

backdir =" d:\\test "

print(backdir)

copydirs = []

copydirs.append(" d:\\temp ");

# copydirs.append("d:\\test");

print(" Copying files  =================== ")

start = datetime.datetime.now()

# gen a data folder for backup

backdir = os.path.join(backdir,start.strftime(" %Y-%m-%d "))

# print("backdir is:"+backdir)

kc =0

fordincopydirs:

kc = kc + copyFiles(d,backdir)

end = datetime.datetime.now()

print(" Finished! =================== ")

print(" Total files :  "+  str(kc) )

print(" Elapsed time :  "+  str((end - start).seconds) +"  seconds ")

defcopyFiles(copydir,backdir):

prefix = getPathPrefix(copydir)

# print("prefix is:"+prefix )

i =0

fordirpath,dirnames,filenamesinos.walk(copydir):

fornameinfilenames:

oldpath = os.path.join(dirpath,name)

newpath = omitPrefix(dirpath,prefix)

print(" backdir is: "+ backdir )

newpath = os.path.join(backdir,newpath)

print(" newpath is: "+ newpath)

ifos.path.exists(newpath) !=True:

os.makedirs(newpath)

newpath = os.path.join(newpath,name)

print(" From: "+ oldpath +"  to: "+ newpath)

shutil.copyfile(oldpath,newpath)

i = i +1

returni

defgetPathPrefix(fullpath):

# Giving /media/data/programmer/project/ , get the prefix

# /media/data/programmer/

l = fullpath.split(os.path.sep)

# print(str(l[-1]=="")

ifl[ -1] == "" :

tmp = l[ -2]

else:

tmp = l[ -1]

returnfullpath[0:len(fullpath) - len(tmp) -1]

defomitPrefix(fullpath,prefix):

# Giving /media/data/programmer/project/python/tutotial/file/test.py ,

# and prefix is Giving /media/data/programmer/project/,

# return path as python/tutotial/file/test.py

returnfullpath[len(prefix) +1:]

mainLogic()

import os

import shutil

import datetime

'''

作用:将目录备份到其他路径。

实际效果:

假设给定目录"/media/data/programmer/project/python" ,

备份路径"/home/diegoyun/backup/“ ,

则会将python目录备份到备份路径下,形如:

/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz..

用法:更改这两个参数.

backdir:备份目的地.

copydirs:想要备份的文件夹.

'''

def mainLogic():

# add dirs you want to copy

backdir = " d:\\test "

print (backdir)

copydirs = []

copydirs.append( " d:\\temp " );

# copydirs.append("d:\\test");

print ( " Copying files =================== " )

start = datetime.datetime.now()

# gen a data folder for backup

backdir = os.path.join(backdir,start.strftime( " %Y-%m-%d " ))

# print("backdir is:"+backdir)

kc = 0

for d in copydirs:

kc = kc + copyFiles(d,backdir)

end = datetime.datetime.now()

print ( " Finished! =================== " )

print ( " Total files : " + str(kc) )

print ( " Elapsed time : " + str((end - start).seconds) + " seconds " )

def copyFiles(copydir,backdir):

prefix = getPathPrefix(copydir)

# print("prefix is:"+prefix )

i = 0

for dirpath,dirnames,filenames in os.walk(copydir):

for name in filenames:

oldpath = os.path.join(dirpath,name)

newpath = omitPrefix(dirpath,prefix)

print ( " backdir is: " + backdir )

newpath = os.path.join(backdir,newpath)

print ( " newpath is: " + newpath)

if os.path.exists(newpath) != True:

os.makedirs(newpath)

newpath = os.path.join(newpath,name)

print ( " From: " + oldpath + " to: " + newpath)

shutil.copyfile(oldpath,newpath)

i = i + 1

return i

def getPathPrefix(fullpath):

# Giving /media/data/programmer/project/ , get the prefix

# /media/data/programmer/

l = fullpath.split(os.path.sep)

# print(str(l[-1]=="")

if l[ - 1 ] == "" :

tmp = l[ - 2 ]

else :

tmp = l[ - 1 ]

return fullpath[0:len(fullpath) - len(tmp) - 1 ]

def omitPrefix(fullpath,prefix):

# Giving /media/data/programmer/project/python/tutotial/file/test.py ,

# and prefix is Giving /media/data/programmer/project/,

# return path as python/tutotial/file/test.py

return fullpath[len(prefix) + 1 :]

mainLogic()

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-06-27 19:51

浏览 7709

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值