python的目录/文件/文本处理概述(入门)

刚入门python语言时,往往我们重点学习的是各种工具库,各种数据结构等,跑代码时输入经常是读取标准输入,或者不需要输入。可是真正做一个项目时,对文件和文本对各种操作和处理方法就显得十分重要了,读取各种格式的文件(txt,csv...),存储各种结构的数据(一个字典,一个矩阵等),还有对目录下文件夹、文件的各种操作。。。

在此,本文江对各种必要的读写、移动复制等操作进行简要概述。

一、文件读写

首先是标准输入输出的交互: input() / print(),不再赘述;

接下来是常用的一套读写标准:

可以查看这个教程

学习一下open函数,语法,同时也要注意访问模式,主要是'r','w','a'等。

file object = open(file_name [, access_mode][, buffering])

打开文件的模式有:

  • r, 只读模式(默认)
  • w,只写模式【不可读;不存在则创建;存在则删除内容】
  • a,追加模式【可读;不存在则创建;存在则只追加内容】

“+”表示可以同时读写某个文件

  • r+,可读写文件【可读;可写;可追加】-----一般使用这个模式
  • w+,可写读文件【可写;可读;可追加】-----基本用不到
  • a+,追加读写文件

“b”表示处理二进制文件(如:FTP发送上传ISO镜像文件,Linux可忽略,windows处理二进制文件时需要标注)

  • rb,以二进制的模式读取文件,不可以传encoding参数
  • wb,以二进制编码的模式写文件 :f.write("string字符串".encode())

打开之后,使用read和write方法进行读写,在这种情况下,最后不要忘了调用close()方法关闭文件。

一般我们使用with语句进行操作,codecs模块也可了解一下。举个例子如下,以下是几种优雅的read文件的方法:

import codecs

with codecs.open("file.txt",'r','utf-8') as f:
    content = f.read()
    print content
print "=========="
with codecs.open("file.txt", 'r', 'utf-8') as f:
    for line in f:
        print line.rstrip()    # 以下三种方法 按行读文件,需加上rstrip/strip方法去掉末尾空行
print "==========="
with codecs.open("file.txt", 'r', 'utf-8') as f:
    # print f.readlines()        # 读取文本中所有内容,并保存在一个列表中,列表中每一个元素对应一行数据
    for line in f.readlines():
        print line.strip()
print "==========="
with codecs.open("file.txt", 'r', 'utf-8') as f:
    print f.readline().rstrip()
    print f.readline().rstrip()

至于write方法则比较简单了,write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符('\n')。

语法:fileObject.write(string)

以上是常用的文件读写的流程,基本够用了。文件对象还有一些其他方法,不太常用,列出来几个,详细的列表可查看

Python File(文件) 方法

tell() 当前文件指向的指针,计数方式是按照字符个数

seek(字符位置)          查找文件相应字符位置

seek(0)                        就是返回到文件开始位置,一般和tell()方法一起使用

encoding()                 返回当前文件编码格式

flush()                 刷新当前缓冲区,建议在关闭文件前先flush当前缓冲区。

二、os模块

os 模块提供了非常丰富的方法用来处理文件和目录。在python中对文件的操作,大多围绕这一模块进行。详细清单参考:

Python OS 文件/目录方法

常用的几个如下:

os.chdir(path)     改变当前工作目录

os.getcwd()        返回当前工作目录

os.listdir(path)    返回path指定的文件夹包含的文件或文件夹的名字的列表。

os.makedirs(path[, mode])     递归文件夹创建函数,像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。

os.mkdir(path[, mode])         以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777。

还有remove, rename等。

另外,os.path下还有许多实用的方法,都是对路径本身(一个字符串)的各种操作。可以参考:    

python os.path模块下常用方法总结

现列出几个常用的家伙:

① os.path.basename(path) #返回文件名

os.path.dirname(path) #返回文件路径

os.path.split(path) #把路径分割成dirname和basename,返回一个元组
>>>print os.path.split("D:\\SQAP\\SQAP Training.pdf")

>>>('D:\\SQAP', 'SQAP Training.pdf')

os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组

② os.path.isabs(path) #判断是否为绝对路径

os.path.isfile(path) #判断路径是否为文件

os.path.isdir(path) #判断路径是否为目录

os.path.exists(path) #路径存在则返回True,路径损坏返回False

③ os.path.abspath(path) #返回绝对路径

os.path.realpath(path) #返回path的真实路径

os.path.join(path1[, path2[, ...]]) #把目录和文件名合成一个路径

os.path.samefile(path1, path2) #判断目录或文件是否相同

os.path.walk(path, visit, arg) #遍历path (比较高级,暂且略过)

总结一下:这里os模块,都是对一些文件名(字符串)和文件目录的操作,目的是找到我们要进行读写、移动复制等的文件或目录对象及其工作地点,以便进行下一步的操作。比如os.chdir(path)使我们移到该目录下,然后在此存储某个文件;os.path.basename(path)我们得到文件名字符串,对字符串进行修改,然后。。怎么都行

三、其他模块

① import glob 

这是一个好用的文件名操作模块,支持正则匹配,可用于筛选符合条件的文件。举例如下;

glob.glob(r'D:/*.txt')    # 这里就是获得D盘下的所有txt文件

glob.glob(r'E:/data/*/*.jpg')    # 获得data目录下所有子目录下的所有jpg文件 

glob.glob(r'../*.py')   # 使用相对路径

glob模块还有一个iglob方法,获取一个可遍历的对象, 使用它可以逐个获取匹配的文件路径名。

glob.glob()同时获取所有的匹配路径,返回值为文件名list 也可用于遍历操作;glob.iglob()返回值为一个迭代器,必须遍历才能 使用。

PS: 简单的判断后缀的话可以使用endswith()方法,参考这里

PS2:如果不会使用这个模块,那么你搜索文件可能十分麻烦,看这个博客你就知道了,不过也没有别的意思啦。python的要点就是简洁,否则你要遍历目录,获取文件名(basename),匹配,再获得完整的文件名吧

② import shutil

该模块可参考博客,python的shutil模块

该模块是高级的文件、文件夹、压缩包 处理模块,有许多“高级的功能”,需要的时候知道有这么个模块去查就是了。

基础的常用的方法主要事文件复制方面的,如下

shutil.copyfileobj(fsrc, fdst[, length])   # copyfileobj方法只会拷贝文件内容
# 举例如下
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)  # copyfile只拷贝文件内容
# 举例如下
shutil.copyfile('f1.log', 'f2.log')

shutil.copy(src, dst)  # 拷贝文件和权限
# 举例如下
shutil.copy('f1.log', 'f2.log')
shutil.copy('./f1.log', 'd:/data/')   # 目的地只写路径 则文件名不变,move方法也是
shutil.move(src, dst)
# 举例如下
shutil.move('file1', 'file2')
shutil.move('d:/file1','e:/')

对文件对复制、移动操作一般用这个模块,好像比较快。。

四、其他读写方法

此处总结出一些工具库内置的文件读写方法,并持续更新。主要是数据分析工具库 numpy和pandas ,都各自具有很好的文件读取的内置方法。

Numpy学习(1)numpy文件存取

使用pandas读取文件

numpy的基本使用savetxt()和loadtxt()就可以了,简单易用;

pandas相应的使用to_csv()和read_csv()即可,read_csv功能十分强大,毕竟pandas是个了不起的数据分析工具。其基本语法如下:

data = pd.read_csv("data.txt"),其参数众多,如:

sep或delimiter:用于对行中各字段进行拆分的字符序列或正则表达式。
header:用作列名的行号。默认为0(第一行),如果文件没有标题行就将header参数设置为None。
index_col:用作行索引的列编号或列名。可以是单个名称/数字或有多个名称/数字组成的列表(层次化索引)。

names:用于结果的列名列表,结合header=None,可以通过names来设置标题行。

这个方法的结果可是厉害的DataFram格式,如果不了解的请主动学习一哈,不再赘述。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值