python 文档操作_Python 文件操作

一. Python 读写 创建文件

Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 shutil 模块 .

一) . OS模块 的基本操作

方法

功能

os.getcwd()

得到当前工作目录,及当前Python脚本工作的目录路径

os.listdir()

返回指定目录下的所有文件和目录名:

os.remoce()

函数用来删除一个文件

os.removedirs(r"C:\python")

删除多个目录

os.path.isfile()

验证给出的路径是否是一个文件

os.patn.isdir()

验证给出的路径是否是一个目录

os,path.isabs()

判断是否是绝对路径

os.path.exists()

检验给出的路径是否真的存在

os.path.split()

返回一个路径的目录名和文件名

os.path.splitext()

分离扩展名

os.path.dirname()

获取路径名

os.path.basename()

获取文件名

os.system()

运行shell命令

os.getenv()与os.putenv()

读取和设置环境变量

os.linesep

给出当前平台使用的行终止符 Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’

os.name

指示你正在使用的平台 对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’

os,rename(old,new)

重命名

os.mekedirs(r“c:\python\test”)

创建多级目录

os.makedir()

创建单个目录

os.stat(file)

获取文件属性

os.chmod(file)

修改文件权限与时间戳

os.exit()

终止当前进程

os.path.getsize(filename)

获取文件大小

os.mknod("test.txt")

创建空文件

fp=open("test.txt,w")

直接打开一个文件,如果不存在则创建文件

二) shutil模块的基本操作

1 .简介:

shutil : 高级的 文件、文件夹、压缩包处理模块

2 . 使用

1) shutil.copyfileobj(文件1,文件2) :将文件1的数据复制copy给文件2.

import shutil

f1 = open("1.txt",encoding="utf-8")

f2 = open("2.txt",encoding="utf-8")

shutil.copyfileobj(f1,f2)

2) shutil.copyfile(文件1,文件2) : 不用打开文件名进行覆盖copy.

import shutil

shutil.copyfile("1.txt","3.txt")

2) shutil.copymode(src,dst) (前提是dst文件存在,不然报错)仅拷贝权限.内容,组,用户均不变

import os

import shutil

stat1 = os.stat('2.txt')

print('2.txt的属性:',stat1)

print('2.txt的mode属性:',stat1.st_mode)

stat2 = os.stat('520.py')

print('520.py的属性:',stat2)

print('520.py的mode属性:',stat2.st_mode)

shutil.copymode('2.txt','520.py')

stat3 = os.stat('520.py')

print('shutil.copymode("2.txt","520.py")后520.py的属性:',stat3)

print('shutil.copymode("2.txt","520.py")后520.py的mode属性:',stat3.st_mode)

======================

2.txt的属性: os.stat_result(st_mode=33323, st_ino=949061, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=91, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534568796)

2.txt的mode属性: 33323

520.py的属性: os.stat_result(st_mode=33204, st_ino=948799, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=46, st_atime=1534569597, st_mtime=1534569597, st_ctime=1534569597)

520.py的mode属性: 33204

shutil.copymode("2.txt","520.py")后520.py的属性: os.stat_result(st_mode=33323, st_ino=948799, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=46, st_atime=1534569597, st_mtime=1534569597, st_ctime=1534569647)

shutil.copymode("2.txt","520.py")后520.py的mode属性: 33323

3) . shutil.copystat(src, dst) 仅拷贝状态信息,即文件属性,包括:mode bits, atime, mtime, flags

import os

import shutil

stat1 = os.stat('2.txt')

print('2.txt的属性:',stat1)

print('2.txt的stat属性:',stat1.st_mode,stat1.st_atime,stat1.st_mtime,stat1.n_fields)

stat2 = os.stat('521.py')

print('521.py.py的属性:',stat2)

print('521.py.py的stat属性:',stat2.st_mode,stat2.st_atime,stat2.st_mtime,stat2.n_fields)

shutil.copystat('2.txt','521.py')

stat3 = os.stat('521.py')

print('shutil.copystat("2.txt","521.py")后521.py的属性:',stat3)

print('shutil.copystat("2.txt","521.py")后521.py的stat属性:',stat3.st_mode,stat3.st_atime,stat3.st_mtime,stat3.n_fields)

================================

2.txt的属性: os.stat_result(st_mode=33323, st_ino=949061, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=91, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534568796)

2.txt的stat属性: 33323 1534563978.802531 1534563620.6685243 19

521.py.py的属性: os.stat_result(st_mode=33204, st_ino=949087, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=31, st_atime=1534572967, st_mtime=1534572967, st_ctime=1534572967)

521.py.py的stat属性: 33204 1534572967.3448722 1534572967.3448722 19

shutil.copystat("2.txt","521.py")后521.py的属性: os.stat_result(st_mode=33323, st_ino=949087, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=31, st_atime=1534563978, st_mtime=1534563620, st_ctime=1534572967)

shutil.copystat("2.txt","521.py")后521.py的stat属性: 33323 1534563978.802531 1534563620.6685243 19

4) . shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹

shutil.ignore_patterns(patterns)(忽略哪个文件,有选择性的拷贝)

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

5). shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件

shutil.rmtree('folder1')

6). shutil.move(src, dst) 递归的去移动文件,它类似mv命令,其实就是重命名。

shutil.move('folder1', 'folder3')

7). shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要压缩的文件夹路径(默认当前目录)

owner: 用户,默认当前用户

group: 组,默认当前组

logger: 用于记录日志,通常是logging.Logger对象

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录

import shutil

ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录

import shutil

ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

import zipfile

# 压缩

z = zipfile.ZipFile('laxi.zip', 'w')

z.write('a.log')

z.write('data.data')

z.close()

# 解压

z = zipfile.ZipFile('laxi.zip', 'r')

z.extractall()

z.close()

import tarfile

# 压缩

tar = tarfile.open('your.tar','w')

tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')

tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')

tar.close()

# 解压

tar = tarfile.open('your.tar','r')

tar.extractall() # 可设置解压地址

tar.close()

OS模块 shutil模块 SyS模块的区别

模块

功能

OS模块

主要是与操作系统的交互

shutil模块

高级的文件,文件夹,压缩包处理模块,也是与系统的交互

SyS模块

主要是与Python解释器的交互

二. 文件的读写操作

一) 基本知识

打开文件的模式

打开文件的方式

r

以只读的方式打开文件

r+

可读写,文件不存在时会报错

rb

只读二进制

r+b

可读写二进制,文件不存在,回报io错误

w

以只写的方式打开

w+

读写的形式打开,将原有的内容擦处

wb

只读写二进制

w+b

只写二进制

a

写在末端

a+

以附加的形式打开可读写的文件

ab

以只写二进制形式打开

a+b

以二进制方式追加

二). 打开文件的方法

方法一

f = open(file,modle,encoding="utf-8")

content = f.read()

lines = file.readlines()

for line in lines:

print(line)

f.close()

精简方式

with open("test.txt","a",encoding="utf-8",error="ignore") as file:

file.read() # 可以添加每次读取的字节数

file.weite()

# 不需要close,也不需要异常处理异常,自动关闭

文件的其他操作

F.flush()

#把缓冲区的内容写入硬盘

F.fileno()

#返回一个长整型的”文件标签“

F.isatty()

#文件是否是一个终端设备文件(unix系统中的)

F.tell()

#返回文件操作标记的当前位置,以文件的开头为原点

F.next()

#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。

F.seek(offset[,whence])

#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

F.truncate([size])

#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

三). 读写 csv文件的操作

1. 读操作

import csv

with open("test.csv","r",encoding="utf-8") as f:

reader =csv.reader(f,"excel",delimiter=";",quoting=csv.QUOTE_MINIMAL)

for row in reader:

print(row)

2. 写操作

import csv

with open ("xxx.csv","a",newline=" ") as f:

writer = csv.write(f,delimiter=";",quotechar="|",quoting=csv.QUOTE_MINIMAL)

writer.writerow(["Tome"]*5+["End Tom"])

四). 读写字典的操作

1. 读操作

import csv

with open("test.csv") as csvfile:

reader = csv.DictReader(csvfile)

for row in reader:

print(row["first_name"],row["last_name"])

2. 写操作

import csv

with open("test.csv","w") as csvfile:

fieldnames = ["first_name","last_name"] # 写入文件的列名

writer = csv.DictWriter(csvfile,fieldnames=fieldnames)

writer.writerheader()

writer.writerow({"first_name":"Backes","last_name":"Beans"})

demo

import csv

with open("test.csv","w") as csvfile:

writer = csv.writer(csvfile)

# 先写入columns_name

writer.writerow(["index","a_name","b_name"])

# 写入多行用writerows

# 可以加入一个for循环写入

writer.writerows([0,1,3],[1,2,3],[2,3,4])

test

# 功能: 讲一字典写入到csv文件中

# 输入: 文件名称,数据字典

import csv

def createDictCSV(filename="",dataDict={}):

with open(fileName,"wb") as csvFile:

csvWriter = csv.writer(csvFile)

for k,v in dataDict.iteritens():

csvWriter.writerow([k,v])

csvFile.close()

三. json 解析

一) . JSON 简介

1. JSON (JavaScript Object Notation),是一种数据交互格式.

Json之前,大家都用 XML 传递数据。XML 是一种纯文本格式,所以适合在网络上交换数据,但是 XML 格式比较复杂,终于道格拉斯·克罗克福特(Douglas Crockford)发明了JSON 这种超轻量级的数据交换格式。

2. JSON 如何使用

数据格式

JSON 实际上是 JavaScript的一个子集,所以JSON 的数据格式和JavaScript 是对应的:

number => JS number

boolean => JS boolean

string => JS string //

null => JS null

array => JS Array 的表达方式 []

object => JS {} 表达式

3. 序列化与反序列化

1). JSON.stringify() # 将对象序列化为JSON字符串

JSON.stringify({},[]," ")

参数一: 要序列化的数据(object)

参数二:控制对象的键值,只想输出制定的属性, 传入一个数组

参数三 : 序列化后,打印输出的格式(一个Tab,可跟直观的查看JSON)

2).JSON.parse() # 讲JSON数据解析为JavaScript对象

JSON.parse(json.data) # 传入json字符串

把 JavaScript 变成 Json ,就是把这个对象序列化为Json字符串,然后才可以通过网络传递.

如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

二). JSON数据格式的形式

1. 数组形式[ ]

[

{

"id" : 1 ,

"naem" : "xiaoming" ,

},

{

"id" : 2,

"naem" : "tom" ,

}]

2. 对象形式

// 前后端分离,推荐后端返回给前端数据格式

{

"status" : 200 ,

"msg" : "success" ,

"data" : [

{

"id" : 1 ,

"naem" : "xiaoming" ,

},

{

"id" : 2,

"naem" : "tom" ,

}]

}

3. 数组对象混合

三). 读写JSON常用的函数

1. json.dumps()和json.loads() 是json格式处理函数

1). json.dumps()函数是将一个python数据类型列表进行json格式的编码,json.dumps()函数是将字典转化为字符串

2). json.loads()函数是将json格式数据转换过为字典,可以这么理解,json.loads()函数是将字符串转化为字典,用字典的方法来取值.

2. 实例说明

1). json.dumps()

json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444',}

jsObj = json.dumps(name_emb)

print(name_emb)

print(jsObj)

print(type(name_emb))

print(type(jsObj))

======================

{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}

{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}

json.dump()用于将dict类型的数据转成str,并写入到json文件中。下面两种方法都可以将数据写入json文件

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}

emb_filename = ("emb_json.json")

# 方法一

jsObj = json.dumps(name_emb)

with open(emb_filename,"w") as f:

f.write(jsObj)

f.close()

# 方法 二

json.dump(name_emb,open(emb_filename,"w"))

2). json.loads()

json.loads()用于将str类型的数据转成dict。

import json

name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444',}

jsDumps = json.dumps(name_emb)

jsLoads = json.loads(jsDumps)

print(name_emb)

print(jsDumps)

print(jsLoads)

print(type(name_emb))

print(type(jsDumps))

print(type(jsLoads))

==========================

# 'a'变成了'a'是因为发生了类型转换,str会转换成unicode

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

{"a": "1111", "b": "2222", "c": "3333", "d": "4444"}

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

json.load()用于从json文件中读取数据。

import json

emb_filename = ("./emb_json.json")

jsObj = json.load(open(emb_filename))

print(jsObj)

print(type(jsObj))

for key in jsObj.keys():

print("key:%s value: %s" %(key,jsObj.get(key)))

======================

{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}

key:a value: 1111

key:b value: 2222

key:c value: 3333

key:d value: 4444

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vc读取北通手柄按键_《噬血代码》手柄怎么操作 北通手柄按键功能详解

噬血代码手柄怎么操作?应该很多朋友都还不是很清楚吧,所以呢小编今天给大家带来的就是噬血代码北通手柄按键功能详解,需要的朋友不妨进来看看。北通手柄按键功能详解游戏介绍本作是由《噬神者》的开发团队带来的完全新作,是迷宫探…

服务器放行6in4协议,最简单的接入IPv6网络的方法 – 6in4隧道

很多大学的校园网启用了IPv6,并且建设了很多IPv6专享的资源。毕业离校,由于现在的网络运营商绝大部分尚未支持IPv6,所以那些资源也就离我们远去了。机缘巧合之下,我知道了,原来我们可以这样接入IPv6网络。目前接入IPv6…

python自动寻路模板_Python实现的简单模板引擎功能示例

本文实例讲述了Python实现的简单模板引擎功能。分享给大家供大家参考,具体如下:#coding:utf- 8__author__"sdm"__author_emailsdmzhu3gmail.com__date__ "$2009-8-25 21:04:13$" pytpl 类似 php的模板类 import sysimport StringIOi…

梦幻群侠传5帮派修炼_梦幻西游:2020年十大更新回顾 法连不秒空和连续战斗修复...

今年梦幻西游有过很多重大的维护更新,其中不少更新都对玩家产生中重大的影响,比如说法术连击第二下不会秒空气,以及副本的迭代等等,今天就来盘点下2020年梦幻西游的十大更新!一、各类副本优化迭代今年优化了多个副本,如…

jq ajax提交评论,织梦评论怎么改成自己的jq ajax评论

如何把织梦评论框改成自己的1、首先我们先获取织梦评论吧!这个比较简单,打开/plus/feedback_ajax.php文件,我们找到这第36行左右代码,看下面/*----------------------获得指定页的评论内容function getlist(){ }-----------------…

前端图片上坐标连线_前端图形学(十三)——弹跳运动的深入之傲娇的小球

欢迎来到【畅哥聊技术】前端图形学相关技术文章,更多精彩内容持续更新中,敬请关注。前面我们说到了小球的弹跳运动,通过一个方向的加速度和摩擦力去影响小球的动画,其目标点也是一个固定不变的,似乎有些单调。那么我们今天继续小球…

python通过内置函数测试对象类型_Python的内置函数

函数名功能描述示例abs()返回数字的绝对值abs(-45)divmod()把除数和余数运算结合起来,返回一个包含商和余数的元组divmod(7,2) 返回:(3,1)raw_input()获取控制台输入,将所有输入看作字符串,返回字符串类型araw_input("input&…

服务器微信了早上好,微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短...

原标题:微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短嘀嘀嘀嘀,我的短信到啦。用关心方式,要你多注意休息;用体贴方式,要你轻松而快乐;用祝福方式,要你一切都过的好&#xff…

c语言调用createthread线程的头文件_易语言API多线程总汇

【thread】 即,线程,是进程中某一顺序的控制流,在单个程序中同时运行多个线程完成不同工作,称为多线程。易语言多线程理解:进程是一个可执行程序,由私有虚拟地址空间、代码、数据和其它操作系统资源组成&am…

oracle varchar默认长度_面试官:如何精确计算mysql数据库索引长度?

概述我们知道MySQL Innodb 对于索引长度的限制为 767 字节,并且UTF8mb4字符集是4字节字符集,则 767字节 / 4字节每字符 191字符(默认索引最大长度),所以在varchar(255)或char(255) 类型字段上创建索引会失败,提示最大索引长度为7…

服务器能像客户端发信息吗,服务器怎么向客户端发信息吗

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情Linux云服…

android things 系统镜像文件_开始菜单搬家!Win 10X 系统 UI 全部重做,明年初就能用上...

不知道老伙计们还记不记得,小淙曾经报道过三次,关于微软新系统 Windows 10X 的消息。当时很多老伙计感觉太遥远,或者觉得它难以激起波澜。但现在看来微软布局已久,是铁了心要搞新系统了。因为 Windows 10X 系统已经准备好交付&…

通达信公式大全_通达信MACD金叉的选股公式大全

公式来源于网络&#xff0c;我只是用其中一个&#xff0c;一起复制来了&#xff0c;有需要的自取吧。1、0轴上方第一次金叉选股公式&#xff1a;DIFF:EMA(CLOSE,12) - EMA(CLOSE,26);DEA : EMA(DIFF,9);MACD : 2*(DIFF-DEA);xg:cross(diff,dea) and dea>-1.0 and dea<0.5…

mysql 时间差_后端从mysql取值返回0时区时间数据的问题

近日搞一个B/S项目&#xff0c;前端页面时间字段总是显示格林威冶时间&#xff0c;也就是0时区的时间&#xff0c;比北京时间差了8个小时。打开后台的数据库&#xff0c;在workbench中查询&#xff0c;结果显示的时间格式正常&#xff0c;为当前北京时间。该时间字段是在往数据…

python接口自动化关联参数_python接口自动化7-参数关联

前言我们用自动化发帖之后&#xff0c;要想接着对这篇帖子操作&#xff0c;那就需要用参数关联了&#xff0c;发帖之后会有一个帖子的id&#xff0c;获取到这个id&#xff0c;继续操作传这个帖子id就可以了(博客园的登录机制已经变了&#xff0c;不能用账号和密码登录了&#x…

abap视图字段限制_【第八章】视图

上一级目录&#xff1a;Mosh_完全掌握SQL课程_学习笔记 其它相关&#xff1a;数据概要【第八章】视图Views (时长18分钟)1. 创建视图Creating Views (5:36)小结就是创建虚拟表&#xff0c;自动化一些重复性的查询模块&#xff0c;简化各种复杂操作&#xff08;包括复杂的子查询…

生活质量衡量系统_数据质量与数据质量八个维度指标

数据质量与数据质量八个维度指标数据的质量直接影响着数据的价值&#xff0c;并且直接影响着数据分析的结果以及我们以此做出的决策的质量。质量不高的数据不仅仅是数据本身的问题&#xff0c;还会影响着企业经营管理决策&#xff1b;错误的数据还不如没有数据&#xff0c;因为…

linux的内置的账户_6 款面向 Linux 用户的开源绘图应用程序

既然你是一名 Linux 用户&#xff0c;为什么不关注一下开源绘图应用程序呢&#xff1f;-- Ankush Das(作者)小时候&#xff0c;当我开始使用计算机(在 Windows XP 中)时&#xff0c;我最喜欢的应用程序是微软的“画图”。我能在它上面涂鸦数个小时。出乎意料&#xff0c;孩子们…

有没有必要买python课_请问自学 Python 有必要买课程吗?

既然说到了找工作&#xff0c;那肯定是要去培训班的。网上优质、实用的免费课程有很多&#xff0c;但都是基础教程&#xff0c;真正能找到Python正式程序员水平的课程&#xff0c;根本没有&#xff01;那些高赞回答中的教程中高阶部分&#xff0c;也是收费教程&#xff01;或者…

kalilinux安装qt_Kali Linux 安装和搜狗输入法的安装

花了两天时间将开发环境换到Linux系统上&#xff0c;又因为自己对渗透测试也有着兴趣&#xff0c;所以就选择了Kali安装了MacOS风格的主题和图标将这两天遇到的坑写一下&#xff0c;重点有三个&#xff1a;1)kali linux系统安装2)Kali Linux中文输入法的安装(搜狗输入法)1.Kali…