python文件操作

文件操作使用的函数
open 打开
read 读
write 写
close 关
其他非常用的 seek 设置读取指针 tell 读取读取指针位置

windows中
def encode(self, encoding=’utf-8′, errors=’strict’)
open 和它的参数
open(file,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closed=True,opener=None)
再mode的’r+’模式中
先读取 后写入会从最后面的地方开始写入
这是因为它的指针stat指在了最后的地方
设置seek 他会写入覆盖指针开始的地方,写玩后指针会在写完内容的后面的地方
‘w+’模式中
进入文件文件不论事先存在与否都会是一个空的文件,
‘a+’模式中
指针开始的地方就在最后,读取不到东西,设置指针seek可以读取到内容
写入内容后都不能够再读取,因为a写入的内容都是追加的,指针在最后面
‘x+’模式
进入的文件是空的,先写入后面才可以读取,
写模式中它的它从seek指针所在位置开始写入

总结:读取文件从指针位置读取,读写文件后在读或者写的最后的地方是指针的位置,’a’模式中进入时就在最后写入时是往最后面追加

 

buffering 缓存模式对于 t文本和b字节有差别
默认 -1 都是默认内存容量
0 b关闭缓存,t无法使用
1 b就是1个字节, t使用到了换行符就缓存
>1 b设置缓冲区大小,t 没明显效果在达到默认的缓存大小时依然能缓存
测试:
设置seek,tell时也会导致缓存内容缓存
如果一个文件多个线程访问时,也会造成内容缓存

在linux中
from pathlib import Path
p = Path()
type(p)
>>pathlib.PosixPath
p
>>posixPath(‘.’)
p.absolute()
>>PosixPath(‘/home/python/magedu/projects/cmdb’)

在Windows中
from pathlib import Path
p = Path()
type(p)
>>pathlib.WindowsPath
p
>>WindowsPath(‘.’)
p.absolute()
>>WindowsPath(‘C:/Users/Administrator’)

 

p = p.joinpath(‘a’,’b’)
p.absolute()
>>PosixPath(‘/home/python/magedu/projects/cmdb/a/b’)
p = p/’c’/’d’ 相当于 p /=’c’/’d’
p
>>PosixPath(‘a/b/c/d’)

p=Path() #当前目录
p=Path(‘a’,’b’,’c/d’) #当前目录下面的a/b/c/d目录
p=Path(‘/etc’) #根下的etc目录

不论Linux,windows ‘/’不需要转义 ‘\’需要转义

p.parent 目录的一个属性返回它的父目录

list(p2.parents) p2目录更高级的目录的列表
[PosixPath(‘/etc’),PosixPath(‘/’)]

p = Path() 不同于字符串的专门的对象,它的方法字符串都不能使用

 

os模块
os.listdir(‘o:/temp’) 返回目录内容列表
os.stat(path,*,dir_fd=None,follow_symlinks=True) 显示文件或目录的标志信息
os.stat_result(st_mode=33206, st_ino=3096224743941554, st_dev=305849394, st_nlink=1, st_uid=0, st_gid=0, st_size=12, st_atime=1508808655, st_mtime=1509154651, st_ctime=1508808655)

os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
os.chmod(‘test.txt’,0o777)

os.chown(path,uid,gid)

shutil模块 复制 删除 移动
copyfile(src,dst,*,follow_symlinks=True)
copyfileobj(fsrc,fdst[,length])
src和dst 必须是表示路径的字符串 length指定buffer的大小,必须对src可读dst可写
fsrc,fdst 必须是open打开的文件类型
它们的原来的权限设置不会改变
copymode(src,dst,*,follow_symlinks=True) 仅仅复制权限

基本数据类型中列表和字典,bytearray都有.copy()方法
copy(src,dst,*,follow_symlinks=True) 底层调用了copyfile和copymode
copy2(src,dst,*,follow_symlinks=True) 底层调用了copyfile和copystat

copytree(src,dst,symlinks=False,ignore=None,copy_function=copy2,ignore_dangling_symlinks=False)
递归复制整个目录,文件直接拷贝,软连接默认直接引用,
ignore= func ,提供一个callable(src,names)->ignored_names.names是os.listdir(src)的结果,
# o:/temp下有a,b目录
def ignore(src,name):
ig = filter(lambda x: x.startswith(‘a’),names) # 忽略a 类型的文件
return set(ig)
shutil.copytree(‘o:/temp’,’O:/tt/o’,ignore=ignore)
– 普通文件
d 目录文件
b 块设备文件
c 字符设备文件
l 符号链
p 管道特殊文件

rm删除
shutil.rmtree(path,ignore_errors=False,onerror=None) 递归删除,非原子操作,

move移动
move(src,dst,copy_function=copy2)
递归移动文件,目录到目标,返回目标
底层使用的是os.rename方法

csv 文件,是一种文件类型
生成一个csv类型的文件需要 指定一个.csv的文件路径
写入一个有行分隔符和列分隔符的字符串
行分隔符\r\n 列分割符常为逗号

读取一个csv文件,要引入csv模块
reader(csvfile,dialect=’excel’,**fmtparams) #返回一个迭代器是DictReader的实例

import csv
p = Path(‘o:/tmp/mycsv/test.csv’)
with open(str(p)) as f:
reader = csv.reader(f)
print(next(reader))
print(next(reader))

 

row = [4,’tom’,22,’tom’]
rows = [
(5,’jerry’,24,’jerry’),
(6,’justin’,22,’just\t”in’)
]
writer(csvfile,dialect=’excel’,**fmtparams) #返回DictWriter的实例

with open(str(p),’a+’) as f:
writer = csv.writer(f)
writer.writerow(row)
writer.writerrows(rows)

4 tom 22 tom
5 jerry 24 jerry
6 justin 22 just ”

 

ini文件 作为配置文件,它很流行
使用configparser配置解析器 这个模块来对它操作
from configparser import ConfigParser
#读取一个.ini文件
cfg = ConfigParser()
cfg.read(‘mysql.ini’) #指明路径
cfg有.sections方法 和.items([section])方法如果知道其中的section名称可以获取
section 的键值对 ,没有参数可以返回一个迭代器

 

serialization 序列化
将内存中对象存储下来,把它变成一个个字节
deserialization 反序列化
字节恢复成内存中对象
每一种高级语言都有自己的序列化的实现

from pathlib import Path
import pickle
写入
pickle.dump(存储对象,文件打开对象) #在文件中操作的
pickle.dumps() #在内存中操作

lst = ‘a b c’.split()
d = dict(zip(‘abc’,range(3))
with open(‘o:/bin’,’wb’) as f:
pickle.dump(lst,f)
pickle.dump(d,f)

with open(‘o:/bin’,’rb’) as f:
tmp = pickle.load(f)
print(tmp)
tmp = pickle.load(f)
print(tmp)
输出结果
[‘a’,’b’,’c’]
{‘a’:0,’b’:1,’c’:2}

class AA()
def show()
…….
aa =AA()
with open(‘o:/bin’,’wb’) as f:
pickle.dump(aa,f) # 对象aa写入文件

with open(‘o:/bin’,’rb’) as f:
tmp= pickle.load(f)
print(type(tmp)) =>输出<class ‘test.AA’>
tmp.show() 可以调用类对象里面的方法

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88169

(0)
daishitongdaishitong
上一篇 2017-10-30
下一篇 2017-10-31

相关推荐

  • 一起学DHCP系列(五)指派、获取

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/163168     本节将主要讲述DHCP客户端获取IP的过程,也是此系列中非常重要的一节。   &…

    Linux干货 2015-03-25
  • Linux发行版的基础目录名称、功能及目录的命名法则

    Linux发行版的基础目录名称、功能及目录的命名法则 基础目录名称及功能 /lib 32位系统的基础共享库文件和可装载的内核模块,用于为/bin和/sbin下的程序提供共享库,并为内核提供内核模块 /lib64 64位系统的基础共享库文件,用于为/bin和/sbin下的程序提供共享库 /etc 系统程序的配置文件 /bin 用户命令的程序文件,所有用户可用 …

    Linux干货 2017-07-02
  • CentOS 6系统启动流程

    Linux系统的组成 内核+根文件系统 内核功能:     进程管理、内存管理、文件系统管理、网络管理、安全功能、驱动程序 运行中的系统环境可分为两层:内核空间、用户空间     用户空间:应用程序(进程或线程)     内核空间:内核代码…

    Linux干货 2016-09-15
  • 计算机的组成及其功能

    <p> Debian     基于Debian二次开发的:Ubuntu RedHat 不同的发行版都是基于linux内核进行二次开发而来。 查看内核版本命令: uname -r [root@localhost ~]# uname -r 3.10.0-327.18.2.el7.x86<em>64 查看发行版本命令: …

    Linux干货 2016-06-23
  • week6

    1、请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白 字符开头的行的行首加#; :%s@^[[:space:]]\+[^[:space:]]@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/…

    Linux干货 2016-12-02
  • 马哥教育首届IT技术博客大赛–复审阶段

    马哥教育首届IT博客大赛大众评审开始了 2016年马哥教育首届IT博客技术大赛,评委初审已结束,正式进入大众评审阶段。。。。 此次博客大赛,虽然因为准备时间比较仓促,举办经验略有不足(快去鄙视小编~&#x1f612;),但还是收到了10多位优秀的小伙伴共80篇博文(看看人家的劲头,这就是差距呀&#x1f613;)的参赛作品投递; 其中初审最高…

    Linux干货 2016-06-07