Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation)
读写文件
#
! /usr/bin/python
#
-*- coding: utf8 -*-
spath
=
"
D:/download/baa.txt
"
f
=
open(spath,
"
w
"
)
#
Opens file for writing.Creates this file doesn't exist.
f.write(
"
First line 1.\n
"
)
f.writelines(
"
First line 2.
"
)
f.close()
f
=
open(spath,
"
r
"
)
#
Opens file for reading
for
line
in
f:
print
(
"
每一行的数据是:%s
"
%
line)
f.close()
'''
知识点: 如何读写文件
'''
遍历文件夹和文件
import
os
import
os.path
#
os,os.path里包含大多数文件访问的函数,所以要先引入它们.
#
请按照你的实际情况修改这个路径
rootdir
=
"
d:/download
"
for
parent, dirnames, filenames
in
os.walk(rootdir):
#
case 1:
for
dirname
in
dirnames:
print
(
"
parent is:
"
+
parent)
print
(
"
dirname is:
"
+
dirname)
#
case 2
for
filename
in
filenames:
print
(
"
parent is:
"
+
parent)
print
(
"
filename with full path :
"
+
os.path.join(parent, filename))
'''
知识点:
* os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
* case1 演示了如何遍历所有目录.
* case2 演示了如何遍历所有文件.
* os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".
'''
分割路径和文件名
分割路径和文件名
import
os.path
#
常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
#
根据你机器的实际情况修改下面参数.
spath
=
"
D:/download/repository.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)
'''
知识点: 这三个函数都返回二元组.
* case1 分隔目录和文件名
* case2 分隔盘符和文件名
* case3 分隔文件和扩展名
'''
总结:5个函数
- os.walk(spath)
- os.path.split(spath)
- os.path.splitdrive(spath)
- os.path.splitext(spath)
- os.path.join(path1,path2)
复制文件
复制文件
import
shutil
import
os
import
os.path
src
=
"
d:\\download\\test\\myfile1.txt
"
dst
=
"
d:\\download\\test\\myfile2.txt
"
dst2
=
"
d:/download/test/测试文件夹.txt
"
dir1
=
os.path.dirname(src)
print
(
"
dir1 %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.copyfile(src, dst)
shutil.copyfile(src, dst2)
f2
=
open(dst,
"
r
"
)
for
line
in
f2:
print
(line)
f2.close()
#
测试复制文件夹树
try
:
srcDir
=
"
d:/download/test
"
dstDir
=
"
d:/download/test2
"
#
如果dstDir已经存在,那么shutil.copytree方法会报错!
#
这也意味着你不能直接用d:作为目标路径.
shutil.copytree(srcDir, dstDir)
except
Exception as err:
print
(err)
'''
知识点:
* shutil.copyfile:如何复制文件
* os.path.exists:如何判断文件夹是否存在
* shutil.copytree:如何复制目录树
'''
总结:4个函数
- os.path.dirname(path)
- os.path.exists(path)
- shutil.copyfile(src, dst)
- shutil.copytree(srcDir, dstDir)
实战:文件备份小程序
实战:文件备份小程序
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
+
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[
-
]
==
""
:
tmp
=
l[
-
]
else
:
tmp
=
l[
-
]
return
fullpath[0:len(fullpath)
-
len(tmp)
-
]
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)
+
:]
mainLogic()
资源参考:
资源参考:
你可以在这里看到更多的api解释,感谢该作者: http://www.cnpython.org/docs/200/p_119.html
Python:文件操作技巧(File operation)(转)的更多相关文章
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- Python之路Python文件操作
Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...
- Python文件操作:文件的打开关闭读取写入
Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...
- 第十二章 Python文件操作【转】
12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...
- 第九章 Python文件操作
前一阵子写类相关的内容,把老猿写得心都累了,本来准备继续介绍一些类相关的知识的,如闭包.装饰器.描述符.枚举类.异常等,现在实在不想继续,以后再开章节吧.本章弄点开胃的小菜提提神,介绍Python中文 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
随机推荐
- 关于如何利用原生js动态给一个空对象添加属性以及属性值
首先,回忆一下,访问对象属性一共有两种方法:点获取法和方括号获取法.而我们最常用的就是点获取法了.但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不太好用了,尤其是我们不知道属性名的时候 ...
- 【题解】NOI2014购票
实际上是一个不完美算法……cogs上面A不掉(爆栈啦).感谢机房大佬PPY的指点,现在也写出来供大家参考参考,理解起来应该是比较简单的一种. 我们首先get出斜率优化方程: \(dp[v] = dis ...
- [Leetcode] Anagrams 颠倒字母构成词
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- BZOJ4567 [Scoi2016]背单词 【trie树 + 贪心】
题目链接 BZOJ4567 题解 题意真是鬼畜= = 意思就是说我们应先将一个串的所有后缀都插入之后再插入这个串,产生代价为其到上一个后缀的距离 我们翻转一下串,转化为前缀,就可以建\(trie\)树 ...
- 安徽师大附中%你赛day7 T2 乘积 解题报告
乘积 题目背景 \(\mathrm{Smart}\) 最近在潜心研究数学, 他发现了一类很有趣的数字, 叫做无平方因子数. 也就是这一类数字不能够被任意一个质数的平方整除, 比如\(6\).\(7\) ...
- CF763C Timofey and Remoduling
题目戳这里. 这道题目纯粹是考思维. 若\(2N \le M\),由于答案肯定是\(s,s+d,\dots,s+(N-1)d\),我们任意枚举两个数\(a,b\),不妨设\(b\)在数列中出现在\(a ...
- THUSC2014酱油记
Day0: 坐飞机到北京,然后报到...跟jason_yu分到一个房间,刚好可以蹭点RP.发现房间460RMB/晚,但再带一份早餐就500RMB,难道早餐是40RMB么...在一家川菜馆吃的午晚餐,感 ...
- mobx基本概念
mobx是一个简单可扩展的状态管理库,主要用来管理状态之间的依赖关系,可以使用在任何状态管理的场景,并不仅限于react. 结合mobx-react可以用在react中,结合mobx-vue可以用在v ...
- malloc calloc realloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- 适用于实数范围的中缀表达式的 + - * / ( ) 计算(C++实现)
核心算法: mid=FormatMid(mid); //格式化中缀表达式 JudgeLegalMid(mid); //判断中缀表达式的合法性 MidToPost mtp(mid); mtp.ToPos ...