python文件及目录操作

python文件及目录操作

读/写文件

新建/打开文件 写入

#举个例子,打开D:\test\data.txt
#以写入模式打开文件
#如果test(上级目录)不存在则报错
#如果data.txt(文件)不存在则创建
fd = open('filename','w')
#如果文件里面已经有内容,那么内容会被清空
fd.write('stirng')
fd.close()

打开文件 读入

#举个例子,打开D:\test\data.txt
#以读入模式打开文件
#如果test(上级目录)不存在则报错
#如果data.txt(文件)不存在则报错
fd = open('filename','r')
#read不传入参数,那么会读取整个文件
content = fd.read()
fd.close()

注意: open第一个参数如果是字符串常量(手工输入)的话,那么会在工作目录中查找,但是,如果传入的是一个字符串变量的话,该字符串需要是该文件的绝对路径

目录操作

新建目录

#例子,当前工作目录C:\test    test目录下src以及其之下的子目录python都不存在
#dirname  C:\test\src\python  
makedirs(C:\test\src\python)  #或者 makedirs(dirname)
#第一参数如果是字符串常量,那么会在工作目录中创建,但是如果是一个字符串变量,那么会生成该绝对路径(沿途不存在的路径也会创建)
#python会把以'\'分割的最后一串字符串(python)视为目录
#如果该目录已存在,那么会报错
#可提前判断一下是否存在该目录
os.path.exists('C:\test\src\python')

浏览目录

方式1

import os
#列出指定目录下的所有文件
#files 里面既包含文件名也包含目录名
files_and_dirs = os.listdir(dir)
#一般来说会用一个for循环来逐个判断
for name in files_and_dirs:
    #所以需要判断是文件还是目录,以便执行不同的操作
    #是否是目录
    #如果要遍历该路径下所有文件/目录,可以使用递归
    os.path.isdir(files_and_dirs)
    是否是文件
    os.path.isfile(files_and_dirs)

方式2

可以直接获得所有信息,不需要手动判断

for root, dirs, files in os.walk(file_dir):  
    print(root) #当前目录路径  
    print(dirs) #当前路径下所有子目录  
    print(files) #当前路径下所有非目录子文件

正则表达式

import re

这里,有关正则表达式的语法在此不多讲,主要讲如何在python中调用正则

明确使用正则的目的

查找字符串

#例子
source = """![1573180919937](C:\\typora-user-images\\1573180919937.png)"""

#模式串
pat = r'!\[(.+)\]\((.+)\)'
#match只匹配source字符串开头,如果前面部分无法匹配,那么就直接返回了
#search会匹配完整个source
mat_res = re.search(pat,source)
if mat_res:
    print mat_res.group()
    print mat_res.group(1)
    print mat_res.group(2)  #这里的group需要在pat中使用`()`捕获,如果没有捕获到那么调用时会报错

注意:

  • 如果有多个group匹配到,那么只会返回最后的一个

替换字符串

方式1:直接替换,new_str与上一次匹配的结果无关

new_source = source.replace(mat_res.group(1),new_str)

方式2:利用正则特性,匹配时替换,这使得在替换的过程中可以使用上一次匹配到的结果

>>> def dashrepl(matchobj):
...     if matchobj.group(0) == '-': return ' '
...     else: return '-'
#如果是'-'那么就变成空格,如果是两个'-'那么就变成一个'-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'

#当然,也支持直接替换
>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
'Baked Beans & Spam'

猜你喜欢

转载自www.cnblogs.com/virgildevil/p/11824156.html