python文件和文件夹訪问File and Directory Access
os.path — Common pathname manipulations
都是和路径指定的文件,文件夹,和路径字符串有关系的函数
os.path.isdir(name) 推断name是不是一个文件夹,name不是文件夹就返回false
os.path.isfile(name) 推断name是不是一个文件。不存在name也返回false
os.path.islink(name) 推断nama是不是一个链接文件
os.path.exists(name) 推断是否存在文件或文件夹name
os.path.getsize(name) 获得文件大小,假设name是文件夹返回0L
os.path.abspath(name) 获得绝对路径
os.path.normpath(path) 规范path字符串形式
os.path.split(name) 切割文件名称与文件夹(其实,假设你全然使用文件夹。它也会将最后一个文件夹作为文件名称而分离,同一时候它不会推断文件或文件夹是否存在)
os.path.splitext() 分离文件名称与扩展名
os.path.join(path,name) 连接文件夹与文件名称或文件夹
os.path.basename(path) 返回文件名称
os.path.dirname(path) 返回文件路径
os.path.basename(path)
Return the base name of pathname path. This is the second half of the pair returned by split(path).
Note that the result of this function is different from the Unix basename program; where basename for ’/foo/bar/’ returns ’bar’, the basename() function returns an empty string (”).
os.path.dirname(path)
Return the directory name of pathname path. This is the first half of the pair returned by split(path).
os.path.abspath(name) 获得绝对路径
realpath = os.path.realpath(filename)
print realpath
# output
# C:\xxx\pyfunc\test.txt
os.path.split()
返回一个路径的文件夹名和文件名称。
- >>> os.path.split('/home/shirley/myself/code/icbc.txt')
- ('/home/shirley/myself/code', 'icbc.txt')
Note:path.split()中文件夹參数对结果的影响
print(path.split(r'E:\mine\java_workspace\AMC_master\Data\Input\corpus_NP'))
返回('E:\\mine\\java_workspace\\AMC_master\\Data\\Input', 'corpus_NP'),而
print(path.split(r'E:\mine\java_workspace\AMC_master\Data\Input\corpus_NP/'))
返回('E:\\mine\\java_workspace\\AMC_master\\Data\\Input\\corpus_NP', '')
os.path.splitext(path)
Split the pathname path into a pair (root, ext) such that root + ext == path, and ext is empty or begins with a period and contains at most one period. Leading periods on the basename are ignored;
splitext(’.cshrc’) returns (’.cshrc’, ”). Changed in version 2.6: Earlier versions could produce an empty root when the only period was the first character.
os.path.join(path1, [path2, [...]])
Join one or more path components intelligently. If any component is an absolute path, all previous components (on Windows, including the previous drive letter, if there was one) are thrown away, and joining continues. The return value is the concatenation of path1, and optionally path2, etc., with exactly one directory separator (os.sep) inserted between components, unless path2 is empty. Note that onWindows, since there is a current directory for each drive,os.path.join("c:", "foo") represents a path relative to the current directory on drive C: (c:foo), not c:\foo.
[os.path
— Common pathname manipulations]
os — Files and Directories
os.getcwd()
函数得到当前工作文件夹。即当前Python脚本工作的文件夹路径。
Return a string representing the current working directory. Availability: Unix, Windows.
os.curdir 返回但前文件夹('.')
os.chdir(dirname) 改变工作文件夹到dirname
os.listdir(path)
返回指定文件夹下的全部文件和文件夹名
Note:listdir会将保护的操作系统文件list出来,如windows下的desktop.ini文件
Return a list containing the names of the entries in the directory. The list is in arbitrary order. It does not include the special entries ’.’ and ’..’ even if they are present in the directory. Availability: Unix,Windows. Changed in version 2.3: OnWindows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects.
os.makedirs(path, [mode])
os.makedirs(os.path.join(WORK_DIR, 'data_analysis/'), exist_ok=True)os.makedirs("./input", exist_ok=True) #能够使用相对路径
exist_ok=True则假设文件夹或文件不存在则创建。否则不创建。相当于加了一个exist推断。
Recursive directory creation function. Like mkdir(), but makes all intermediate-level directories needed to contain the leaf directory. Throws an error exception if the leaf directory already exists or cannot be created. The default mode is 0777 (octal). On some systems, mode is ignored. Where it is used, the current umask value is first masked out.
Note: makedirs() will become confused if the path elements to create include os.pardir. New in version 1.5.2.Changed in version 2.3: This function now handles UNC paths correctly.
os.walk(top, [topdown=True, [onerror=None, [followlinks=False]]])
os.walk是一个generator函数。Generate the file names in a directory tree by walking the tree either top-down or bottom-up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames,filenames).......每次能够得到一个三元tupple。当中第一个为起始路径,第二个为起始路径下的文件夹。第三个是起始路径下的文件。
举比例如以下:
>>> x
<generator object walk at 0x8ef652c>
>>>for i in x:
... i
...
('/home/tiny/workspace/py', ['2', '1'], ['.allfile.py.swp', 'allfile.py', 'list_get.py', 'test.py', 'tags', 'log.txt'])
('/home/tiny/workspace/py/2', [], ['fib.py', 'djcoding.py', 'drectory_travel.py', 'foo.py'])
('/home/tiny/workspace/py/1', [], ['timetest2.py', 'timetest.py'])
os.rmdir(path, *, dir_fd=None)
Remove (delete) the directory path. Only works when the directory isempty, otherwise, OSError is raised.
os.
removedirs
(name)
递归删除空文件夹(包含父文件夹)。子文件夹非空出错。
递归删除文件夹(全部子文件夹,包容非空子文件夹):
__import__('shutil').rmtree(DATA_DIR)
[shutil.rmtree(path, ignore_errors=False, onerror=None)]
os.remove(path, *, dir_fd=None)
删除文件:Remove (delete) the file path. If path is a directory, OSError israised.
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)
改动文件权限
[The Python Library Reference Release2.6 - 16.1.4]
python创建新文件
创建某个文件:直接使用写模式打开就能够了
with open(json_file, 'w', encoding='utf-8') as out_file
可是假设文件名称中带有路径,而路径不存在就会报错:FileNotFoundError: [Errno 2] No such file or directory: 'word_seg\\0'
这时要先推断路径是否存在,若不存在要先创建路径。再去新建文件
os.makedirs(os.path.dirname(json_file), exist_ok=True)
with open(json_file, 'w', encoding='utf-8') as out_file
注意,假设要创建的文件带有路径,而文件名称又是一个路径时,用写w模式打开会出错,由于这时打开的是一个路径。将一个路径当成文件打开就会出现例如以下错误:
PermissionError: [Errno 13] Permission denied:
其解决方法还是上面的,先推断路径存在否,再创建文件。
shutil
— High-level file operations
shutil.copyfile(src, dst, *, follow_symlinks=True)
- shutil.copy(src, dst, *, follow_symlinks=True)
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)¶
shutil.rmtree(path, ignore_errors=False, onerror=None)
Delete an entire directory tree; path must point to a directory (but not asymbolic link to a directory). If ignore_errors is true, errors resultingfrom failed removals will be ignored; if false or omitted, such errors arehandled by calling a handler specified by onerror or, if that is omitted,they raise an exception.
- 递归删除文件夹(全部子文件夹。包容非空子文件夹):
if os.path.exists(os.path.join(CWD, 'middlewares/metadata')):
__import__('shutil').rmtree(os.path.join(CWD, 'middlewares/metadata'))
- shutil.move(src, dst, copy_function=copy2)
- shutil.chown(path, user=None, group=None)
[shutil
— High-level file operations]
Glob()查找文件
大多Python函数有着长且具有描写叙述性的名字。可是命名为glob()的函数你可能不知道它是干什么的除非你从别处已经熟悉它了。
它像是一个更强大版本号的listdir()函数。
它能够让你通过使用模式匹配来搜索文件。
import glob
# get all py files
files = glob.glob('*.py')
print files
# Output
# ['arg.py', 'g.py', 'shut.py', 'test.py']
import glob
# get all py files
files = glob.glob('*.py')
print files
# Output
# ['arg.py', 'g.py', 'shut.py', 'test.py']
你能够像以下这样查找多个文件类型:
def multiple_file_types(*patterns):
return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns)
for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements
print filename
# output
#=========#
# test.txt
# arg.py
# g.py
# shut.py
# test.py
假设你想得到每一个文件的绝对路径。你能够在返回值上调用realpath()函数:
import itertools as it, glob, os
def multiple_file_types(*patterns):
return it.chain.from_iterable(glob.glob(pattern) for pattern in patterns)
for filename in multiple_file_types("*.txt", "*.py"): # add as many filetype arguements
realpath = os.path.realpath(filename)
print realpath
#=========#
# C:\xxx\pyfunc\test.txt
# C:\xxx\pyfunc\arg.py
# C:\xxx\pyfunc\g.py
# C:\xxx\pyfunc\shut.py
# C:\xxx\pyfunc\test.py
[glob
— Unix style pathname pattern expansion]
fnmatch 实现shell风格模式匹配特定字符
fnmatch.fnmatch(names, pattern)
測试name是否匹配pattern,返回true/false。
以下的样例列出了当前文件夹中的全部py文件:
>>>import fnmatch
>>>import os
>>>for file in os.listdir('.'):
... if fnmatch.fnmatch(file, '*.py'):
... print file
...
allfile.py
list_get.py
test.py
假设操作系统是大写和小写不敏感的,则在fnmatch.fnmatch()中全部的參数将被统一格式为全部大写或全部小写。
fnmatch.fnmatchcase( names, pattern)
与平台无关的大写和小写敏感的fnmatch.fnmatch
fnmatch.filter(names, pattern)
实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表,例:
>>> files=['tags', 'readme.txt', 'allfile.py', 'test.py']
>>> fnmatch.filter(files, '*.py')
['allfile.py', 'test.py']
>>> fnmatch.filter(files, '[tx]*')
['tags', 'test.py']
>>> fnmatch.filter(files, '[tr]*')
['tags', 'readme.txt', 'test.py']
>>> fnmatch.filter(files, '*[tr]*')
['tags', 'readme.txt', 'test.py']
>>> fnmatch.filter(files, '?[a]*')
['tags']
注意: [seq] 匹配单个seq中的随意单个字符
fnmatch.translate(pattern)
翻译模式。 fnmatch将这样的全局模式转换成一个正则式。 然后使用re模块来比較名字和模式。 translate() 函数是一个公共API用于将全局模式转换成正则式。
>>>import fnmatch
>>> pattern='*.py'
>>>print fnmatch.translate(pattern)
.*\.py\Z(?ms)
- unix shell风格匹配方式
- *表示匹配不论什么单个或多个字符
- ?
表示匹配单个字符
- [seq] 匹配单个seq中的随意单个字符
- [!seq]匹配单个不是seq中的随意单个字符
[fnmatch
— Unix filename pattern matching]
python文件读取模块 - fileinput模块
fileinput模块能够对一个或多个文件里的内容进行迭代、遍历等操作。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。
Python的精髓在于模块的运用,运用C的思维,非常难学好Python。
fileinput模块能够轻松的遍历文本的全部行,能够实现相似pythonsome_script.py file_1.txt file_2.txtfile_2.txt的模式。
实际上就是一个readline()。仅仅只是能够实现很多其他的功能
该模块的input()函数有点相似文件readlines()方法,差别在于:
前者是一个迭代对象。即每次仅仅生成一行,须要用for循环迭代。后者是一次性读取全部行。
在碰到大文件的读取时。前者无疑效率更高效。
【基本格式】
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
【默认格式】
fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
- files: #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
- inplace: #是否将标准输出的结果写回文件,默认不代替
- backup: #备份文件的扩展名,仅仅指定扩展名。如.bak。假设该文件的备份文件已存在,则会自己主动覆盖。
- bufsize: #缓冲区大小,默觉得0,假设文件非常大,能够改动此參数,一般默认就可以
- mode: #读写模式,默觉得仅仅读
- openhook: #该钩子用于控制打开的全部文件。比方说编码方式等;
fileinput模块中的经常使用函数
fileinput.input() #返回能够用于for循环遍历的对象
fileinput.filename() #返回当前文件的名称
fileinput.lineno() #返回当前已经读取的行的数量(或者序号)
fileinput.filelineno() #返回当前读取的行的行号
fileinput.isfirstline() #检查当前行是否是文件的第一行
fileinput.isstdin() #推断最后一行是否从stdin中读取
fileinput.close() #关闭队列
[fileinput
— Iterate over lines from multiple input streams]
linecache
读取文件某一行的内容(測试过1G大小的文件,效率还能够)
import linecache
count = linecache.getline(filename,linenum)
str = linecache.getlines(filename) #str为列表形式,每一行为列表中的一个元素
Note:linecache是专门支持读取大文件,并且支持行式读取的函数库。 linecache预先把文件读入缓存起来。后面假设你訪问该文件的话就不再从硬盘读取。
读取文件之后你不须要使用文件的缓存时须要在最后清理一下缓存。使linecache.clearcache()清理缓存,释放缓存。
这个模块是使用内存来缓存你的文件内容。所以须要耗费内存,打开文件的大小和打开速度和你的内存大小有关系。
python从第二行開始读文件到k行
1 data = open(filename)
next(data) #或者data.readline()
for e in data:
print(e)
2 lines = f.readlines()[1:]
for l in lines:
print(l)
3. a=linecache.getlines('a.txt')[0:-1]
python从第i行開始读文件到第j行
1. 获取a.txt文件里第1-4行的内容
>>> a=linecache.getlines('a.txt')[0:4]
[python linecache模块读取文件使用方法具体解释]
《python cookbook》中文版第二版 2.4节从文件里读取指定的行 (Luther Blissett)
tempfile模块
用于生成暂时文件和文件夹
tempfile.mkdtemp(suffix=None, prefix=None, dir=None)
Creates a temporary directory in the most secure manner possible. Thereare no race conditions in the directory’s creation. The directory isreadable, writable, and searchable only by the creating user ID.
The user of mkdtemp() is responsible for deleting the temporarydirectory and its contents when done with it.
The prefix, suffix, and dir arguments are the same as formkstemp().mkdtemp() returns the absolute pathname of the new directory.
如:
import tempfile path = tempfile.mkdtemp(suffix='.txt', prefix='pi')
print(path)
/tmp/piv5dwqs01.txt
with tempfile.TemporaryFile() as fp:
... fp.write(b'Hello world!')
... fp.seek(0)
... fp.read()
b'Hello world!'
[tempfile
— Generate temporary files and directories]
其他相关库
[pathlib
— Object-oriented filesystem paths]
[stat
— Interpreting stat()
results]
[filecmp
— File and Directory Comparisons]
[macpath
— Mac OS 9 path manipulation functions]
from:http://blog.csdn.net/pipisorry/article/details/47907589
ref: [File and Directory Access]
[https://docs.python.org/3/library/os.html]
[The Python Library Reference Release2.6 - 11.1]
python文件和文件夹訪问File and Directory Access的更多相关文章
- apache主机(网站)配置,port监听,文件夹訪问权限及分布式权限
前言 一个网站的两个核心信息为: 主机名称(server名/网站名):ServerName server名 网站位置(网站文件夹路径):DocumentRoot "实际物理路径" ...
- 使用apache htpasswd生成加密的password文件,并使用.htaccess控制文件夹訪问
htpasswd 是apache的小工具.在apache安装文件夹bin下可找到. Usage: htpasswd [-cmdpsD] passwordfile username htpasswd - ...
- ProFTPD配置匿名登录与文件夹訪问权限控制
对ProFTPDserver配置匿名登录. 查看配置文件proftpd.conf.默认情况下配置文件里的.匿名登录配置User和Group均为ftp. 查看/etc/passwd确认用 ...
- OpenGL开发时,fatal error C1083: 无法打开包括文件:“gl\glut.h”: No such file or directory
本人使用的是vs2012,编写一个简单的opengl程序,运行的时候总是提示: fatal error C1083: 无法打开包括文件:“gl/glut.h”: No such file or dir ...
- Cocos2d-x 3.0 beta 中加入附加项目,解决无法打开包括文件:“extensions/ExtensionMacros.h”: No such file or directory”
Cocos2d-x 3.0 Alpha 1开始 对目录结构进行了整合.结果有些附加项目也被在项目中被精简出去. 比如说如果你需要使用CocoStdio导出的JSON.或使用Extensions扩展库, ...
- [Python爬虫] Selenium自己主动訪问Firefox和Chrome并实现搜索截图
前两篇文章介绍了安装.此篇文章算是一个简单的进阶应用吧.它是在Windows下通过Selenium+Python实现自己主动訪问Firefox和Chrome并实现搜索截图的功能. [Python爬虫] ...
- C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析
以下类的命名空间都是:System.I/0; 一.Path:主要对文件路径的操作! 常用方法: String path=@"C:\a\b\c\123.txt"; 1-1.Path. ...
- 向CodeBlocks的Project中添加calss文件时,出现No such file or directory错误的解决方案
我们在CodeBlocks中编写程序时,一般要建立工程.现在建立工程first,然后建立类文件Person,并将其添加到first中, int main() { Person p; p.display ...
- 新增分区格式化时提示设备文件不存在:--- No such file or directory的处理方法
[原文链接]:http://blog.itpub.net/28874898/viewspace-774249/ 在系统中的空余空间添加新的分区: fdisk /dev/sda (第一块硬盘上) ...
随机推荐
- 【吐槽】关于256个 class可以覆盖一个id的问题
还是说今天下午面试的事情,被面试官问了 40多分钟的问题,我觉得丫 一定是从哪个网站down了几份面试题,自个儿整合了一下,然后挨个问,刚开始感觉哟,不错哦,面试官懂的蛮多的. 然后问到某个问题之后, ...
- 68、django之session与分页
前面我们介绍了cookies,主要应用在用户登录上,保存用户登录状态,不过cookies直接放在了浏览器上,安全性较低,所以我们便引出了session功能与cookies相同,不同的是它放在了客户端, ...
- C#写的较完美验证码通用类
using System; using System.Collections; using System.ComponentModel; using System.Data; using System ...
- JAVA学习摘要
JAVA关键字 JAVA数据类型 数据类型的使用实例 JAVA注释的使用 使用文档注释时还可以使用 javadoc 标记,生成更详细的文档信息: @author 标明开发该类模块的作者 @versio ...
- 完美解决--用VS中的Git做代码管理器,与他人共享代码
1.创建代码仓库,这里说一下为什么要创建仓库,Git不能够作为源代码管理器,vs中自带的也只能够在本地进行管理,要和他们共享的话必须要有服务器端去存储代码,类似于SVN,它就有客户端和服务器端,这里推 ...
- swizzle method 和消息转发机制的实际使用
我的工程结构,如图 1-0 图 1-0 在看具体实现以前,先捋以下 实现思路. ViewController 中有一个-(void)Amethod;A方法. -(void)Amethod{ NSLo ...
- abstract的方法是否可同时是static,是否可同时是native,是否可同时是synchronized?
1.abstract与static (what) abstract:用来声明抽象方法,抽象方法没有方法体,不能被直接调用,必须在子类overriding后才能使用 static:用来声明静态方法,静态 ...
- vue 项目中实用的小技巧
# 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...
- JavaScript的简单继承实现案例
<html><body><script> //实现JavaScript继承的步骤: //1:写父类 //2:写子类 //3:用Object.create()来实现继 ...
- ideal中如何添加几个不同的项目在同一个idea页面显示(同一个窗口显示多个工程)
今天,我遇到了一个问题,就是同事给了我一些项目,我下载了之后,项目有点多,然后想把这些项目都放到一个里面,所以我就采取了添加module的方式进行添加,首先先看一下我们的四个项目, 我们就想实现在一个 ...