文件读写

读文件

try:

# windows下utf8

f = open('./README.md', 'r', encoding='utf8', errors='ignore')

print(f.read())

finally:

f and f.close()

# 用with简化

with open('./README.md', 'r', encoding='utf8') as f:

print(f.read())

# 迭代读取大文件

with open('./README.md', 'r', encoding='utf8') as f:

# readline()可以每次读取一行内容

for line in f.readlines():

# 把末尾的'\n'删掉

print(line.strip())

# 读取二进制文件

f = open('/Users/michael/test.jpg', 'rb')

f.read() # b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件

可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险

with open('./test2.md', 'a', encoding='utf8') as f:

f.write('Hello, python!')

# 文件内字符替换,把你好替换为hi,然后读取内容到内存中

with open('test.txt','r') as f:

s = f.readlines()

# 接着打开文件,用replace替换掉你内存中的内容,然后写入文件

with open('test.txt','w') as w:

for i in s:

w.write(i.replace('你好','hi'))

StringIO和BytesIO

StringIO

在内存中读写str。

from io import StringIO

f = StringIO()

f.write('hello')

f.write(' ')

f.write('world!')

print(f.getvalue()) # 方法用于获得写入后的str。

f = StringIO('Hello!\nHi!\nGoodbye!')

while True:

s = f.readline()

if(s == ''):

break

print(s.strip())

BytesIO

内存中读写bytes

from io import BytesIO

f = BytesIO()

f.write('中文'.encode('utf-8')) # 写入的不是str,而是经过UTF-8编码的bytes。

print(f.getvalue())

f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')

f.read() # b'\xe4\xb8\xad\xe6\x96\x87'

操作文件和目录

import os

os.name # 如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。

os.uname() # 注意uname()函数在Windows上不提供

环境变量

在操作系统中定义的环境变量,全部保存在os.environ这个变量中

import os

os.name

'nt'

os.environ # 获取环境变量

os.environ.get('PATH')

os.environ.get('x', 'default')

操作文件和目录

操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中

# 查看当前目录的绝对路径:

os.path.abspath('.')

# 当前的目录名

os.path.dirname(os.path.abspath(__file__))

# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:

os.path.join('/Users/michael', 'testdir') # '/Users/michael/testdir'

# 然后创建一个目录:

os.mkdir('/Users/michael/testdir')

# 删掉一个目录:

os.rmdir('/Users/michael/testdir')

# 路径拆分

os.path.split('/Users/michael/testdir/file.txt')

# 获得文件扩展名

os.path.splitext('/path/to/file.txt')

# 对文件重命名

os.rename('test.txt', 'test.py')

# 删掉文件

os.remove('test.py')

#OS模块

#os模块就是对操作系统进行操作,使用该模块必须先导入模块:

import os

#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)

result = os.getcwd()

print(result)

#chdir()改变当前工作目录

os.chdir('/home/sy')

result = os.getcwd()

print(result)

open('02.txt','w')

#操作时如果书写完整的路径则不需要考虑默认工作目录的问题,按照实际书写路径操作

open('/home/sy/下载/02.txt','w')

#listdir() 获取指定文件夹中所有内容的名称列表

result = os.listdir('/home/sy')

print(result)

#mkdir() 创建文件夹

#os.mkdir('girls')

#os.mkdir('boys',0o777)

#makedirs() 递归创建文件夹

#os.makedirs('/home/sy/a/b/c/d')

#rmdir() 删除空目录

#os.rmdir('girls')

#removedirs 递归删除文件夹 必须都是空目录

#os.removedirs('/home/sy/a/b/c/d')

#rename() 文件或文件夹重命名

#os.rename('/home/sy/a','/home/sy/alibaba'

#os.rename('02.txt','002.txt')

#stat() 获取文件或者文件夹的信息

#result = os.stat('/home/sy/PycharmProject/Python3/10.27/01.py)

#print(result)

#system() 执行系统命令(危险函数)

#result = os.system('ls -al') #获取隐藏文件

#print(result)

#环境变量

'''

环境变量就是一些命令的集合

操作系统的环境变量就是操作系统在执行系统命令时搜索命令的目录的集合

'''

#getenv() 获取系统的环境变量

result = os.getenv('PATH')

print(result.split(':'))

#putenv() 将一个目录添加到环境变量中(临时增加仅对当前脚本有效)

#os.putenv('PATH','/home/sy/下载')

#os.system('syls')

#exit() 退出终端的命令

#os模块中的常用值

#curdir 表示当前文件夹 .表示当前文件夹 一般情况下可以省略

print(os.curdir)

#pardir 表示上一层文件夹 ..表示上一层文件夹 不可省略!

print(os.pardir)

#os.mkdir('../../../man')#相对路径 从当前目录开始查找

#os.mkdir('/home/sy/man1')#绝对路径 从根目录开始查找

#name 获取代表操作系统的名称字符串

print(os.name) #posix -> linux或者unix系统 nt -> window系统

#sep 获取系统路径间隔符号 window ->\ linux ->/

print(os.sep)

#extsep 获取文件名称和后缀之间的间隔符号 window & linux -> .

print(os.extsep)

#linesep 获取操作系统的换行符号 window -> \r\n linux/unix -> \n

print(repr(os.linesep))

#导入os模块

import os

#以下内容都是os.path子模块中的内容

#abspath() 将相对路径转化为绝对路径

path = './boys'#相对

result = os.path.abspath(path)

print(result)

#dirname() 获取完整路径当中的目录部分 & basename()获取完整路径当中的主体部分

path = '/home/sy/boys'

result = os.path.dirname(path)

print(result)

result = os.path.basename(path)

print(result)

#split() 将一个完整的路径切割成目录部分和主体部分

path = '/home/sy/boys'

result = os.path.split(path)

print(result)

#join() 将2个路径合并成一个

var1 = '/home/sy'

var2 = '000.py'

result = os.path.join(var1,var2)

print(result)

#splitext() 将一个路径切割成文件后缀和其他两个部分,主要用于获取文件的后缀

path = '/home/sy/000.py'

result = os.path.splitext(path)

print(result)

#getsize() 获取文件的大小

#path = '/home/sy/000.py'

#result = os.path.getsize(path)

#print(result)

#isfile() 检测是否是文件

path = '/home/sy/000.py'

result = os.path.isfile(path)

print(result)

#isdir() 检测是否是文件夹

result = os.path.isdir(path)

print(result)

#islink() 检测是否是链接

path = '/initrd.img.old'

result = os.path.islink(path)

print(result)

#getctime() 获取文件的创建时间 get create time

#getmtime() 获取文件的修改时间 get modify time

#getatime() 获取文件的访问时间 get active time

import time

filepath = '/home/sy/下载/chls'

result = os.path.getctime(filepath)

print(time.ctime(result))

result = os.path.getmtime(filepath)

print(time.ctime(result))

result = os.path.getatime(filepath)

print(time.ctime(result))

#exists() 检测某个路径是否真实存在

filepath = '/home/sy/下载/chls'

result = os.path.exists(filepath)

print(result)

#isabs() 检测一个路径是否是绝对路径

path = '/boys'

result = os.path.isabs(path)

print(result)

#samefile() 检测2个路径是否是同一个文件

path1 = '/home/sy/下载/001'

path2 = '../../../下载/001'

result = os.path.samefile(path1,path2)

print(result)

#os.environ 用于获取和设置系统环境变量的内置值

import os

#获取系统环境变量 getenv() 效果

print(os.environ['PATH'])

#设置系统环境变量 putenv()

os.environ['PATH'] += ':/home/sy/下载'

os.system('chls')

# 列出当前目录文件名

[x for x in os.listdir('.') if os.path.isdir(x)]

# 列出所有的.py文件

[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

# walk返回:tupple(dirpath:路径, dirnames:该路径下面的目录list, filenames: 该路径下面的文件list)

for fpathe,dirs,fs in os.walk(path):

for f in fs:

print(os.path.join(fpathe,f))

注意: 不用通过直接拼接字符串的方式,来拆分路径。这样可以正确处理不同操作系统的路径分隔符;

以上就是详解Python IO编程的详细内容,更多关于Python IO编程的资料请关注python博客其它相关文章!

python import io_详解Python IO编程相关推荐

  1. python流程控制-详解Python流程控制语句

    流程控制 流程:代码执行的过程 控制:对代码执行过程的把控 三大结构 顺序结构:代码默认从上到下,依次执行 分支结构:单项分支,双向分支,多项分支,巢状分支 循环结构:while循环和for循环 单项 ...

  2. python操作符op_详解python中的 is 操作符

    大家可以与Java中的 == 操作符相互印证一下,加深一下对引用和对象的理解.原问题: Python为什么直接运行和在命令行运行同样语句但结果却不同,他们的缓存机制不同吗? 其实,高票答案已经说得很详 ...

  3. python 标准输出_详解Python的标准输入输出

    本篇文章给大家分享的是详解Python的标准输入输出,内容挺不错的,希望可以帮助到有需要的朋友 一.标准输入输出 1.打印到屏幕 产生输出的最简单方法是使用print语句,可以通过用逗号分隔零个或多个 ...

  4. python循环语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  5. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  6. python装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  7. python装饰器详解-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

  8. python数组排序sort_详解python中sort排序使用

    1.前言 昨天一学妹问我一个关于python的问题,当时在外忙碌,没时间细看.今天看一下,咋一看我还真的不知道这个问题,bookinfo.sort(reverse=True ,key=lambda x ...

  9. c与python 数据传递-详解python如何调用C/C++底层库与互相传值

    前言 开发环境: Centos 7 + Python 3.5.1 + Qt Creator(只是使用Qt Creator编译而已,并没有使用QT的任何库) Python调用C/C++库,我现在能做到的 ...

最新文章

  1. python爬虫自学笔记分析解密_Python爬虫自学系列(七) -- 项目实战篇(一)
  2. Application Virtualization 4.5 部署之(一)
  3. IDEA 2019.1 不支持lombok插件问题解决方案
  4. make时候说找不到makefile_优秀自律的句子:找不到理由继续的时候,就找个理由重头来过吧...
  5. 时间戳转datetime格式
  6. 马斯克:特斯拉电动皮卡Cybertruck能在水上漂一会儿
  7. string和wstring相互转换
  8. python笔记03_IO编程
  9. vue指令和特殊特性
  10. python3 写入excel_Python3 读、写Excel文件的操作方法
  11. 最近使用VirtualBox安装虚拟机,频繁崩溃。是不是有什么隐藏限制?
  12. amd核芯显卡控制面板自定义分辨率_显卡是哪个
  13. Mybatis-Plus实现逻辑删除
  14. 上网行为管理软件的功能
  15. linux ll -hrt,Linux col(每日一令之十六)
  16. 前端白屏问题_首页白屏的引发的思考(一)
  17. Linux下BMP图片截图
  18. vmware设置共享文件夹
  19. 多wan口路由虚拟服务器,简单的多WAN路由器带宽聚合功能测试方案
  20. 坐标变换学习笔记—代码篇Matlab

热门文章

  1. 分享2020 几个好用的ip地址归属地查询
  2. GOF23设计模式(创建型模式) 原型模式
  3. Android中View如何刷新
  4. 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍
  5. [C] 图的广度优先遍历
  6. HarmonyOS 界面跳转以及界面跳转的同时传递参数
  7. python 删除字符串中重复的元素
  8. Timer 的简单介绍
  9. android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating
  10. 第2节 mapreduce深入学习:4, 5