Python文件IO(普通文件读写)
## 打开一个文件
- fileobj = open(filename, mode)
其中:
fileobj是open()返回的文件对象
filename是该文件的字符串名
mode是指明文件类型和操作的子字符串
- mode的第一个字母表示对其的操作
- r表示读取
- w表示写入,如果文件不存在就创建,如果存在则重新写入新内容
- x表示在文件不存在的情况下新创建并写文件
- a表示如果文件存在,在文件末尾追加内容
- mode的第二个字母是文件类型
- t(或者省略)代表文本类型
- b代表二进制文件
## 使用write()写入文件,使用close()关闭文件
poem = """
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
file_obj.write(poem) # 写入文件
file_obj.close() # 关闭文件
- 也可以使用print()写入文件
poem = """
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
print(poem, file=file_obj) # 写入文件
file_obj.close() # 关闭文件
- 如果需要写入的内容非常多,可以将数据分块写入
poem = """
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
file_obj = open("诗", 'wt') # 打开名为‘诗’的文本文件,若‘诗’不存在则创建 start = 0
chunk = 20 # 每次写入20个字符
while True:
if start > len(poem):
break
file_obj.write(poem[start:start+chunk])
start += chunk file_obj.close() # 关闭文件
## 文件读取
- read():不带参数的read()函数一次读取文件的所有内容
file_obj = open("诗", 'rt') # 使用读取模式打开文本文件
poem = file_obj.read() # 读取文件中所有内容
file_obj.close() # 关闭文件
print(poem)
"""
输出:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
- 同样可以分块读取
poem = ''
file_onj = open("诗", 'rt')
chunk = 20 # 每次读取20个字符
while True:
frag = file_onj.read(chunk)
if not frag: # 读到文件末尾时再次调用read()函数会返回空字符串,not frag为真,执行break
break
poem += frag print(poem)
"""
输出:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
- 一行一行的读取
poem = ''
file_obj = open('诗', 'rt')
while True:
line = file_obj.readline()
if not line:
break
poem += line print(poem)
"""
输出:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
- 使用迭代器读取文件
poem = ''
file_obj = open("诗", 'rt')
for line in file_obj: # 效果相同,但代码更短
poem += line print(poem)
"""
输出:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
- readlines():每次读取一行,并返回单行字符串的列表
file_obj = open("诗", 'rt')
lines = file_obj.readlines()
print(lines)
for line in lines:
print(line, end='')
"""
['\n', ' 离离原上草,一岁一枯荣。\n', ' 野火烧不尽,春风吹又生。\n', ' 远芳侵古道,晴翠接荒城。\n', ' 又送王孙去,萋萋满别情。\n']
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
## write()写入二进制文件
bin_data = bytes(range(0, 255)) # 将序列转换为二进制数据
f = open('bin_file', 'wb') # 以二进制文件的格式打开文件
f.write(bin_data) # 写入
f.close() # 关闭
- 分段写入
bin_data = bytes(range(0, 255))
f = open('bin_file', 'wb')
chunk = 100 # 每次写入100个字节
offset = 0
while True:
if offset > len(bin_date):
break
f.write(bin_data[offset:chunk + offset])
offset += chunk f.close()
- 读取二进制文件
f = open('bin_file', 'rb')
bin_data = f.read()
f.close()
## 使用with自动关闭文件,with代码块执行完毕后自动关闭文件
with open("诗", 'rt') as f:
poem = f.read()
print(poem)
"""
输出:
离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
"""
本文参考:
[美]Bill Lubanovic 《Python语言及其应用》
Python文件IO(普通文件读写)的更多相关文章
- 文件IO——将文件dfs的文件内容第三个字节之后的内容复制到文件dfd中
/* 使用文件IO将文件fds中的内容复制到文件fdd中去 1.创建两个文件描述符 2.使用open()方法分别以只读只写方式将文件描述符符文件连接 3.将读位置后移三位 4.将fds内容存储到缓冲区 ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
- 第9.11节 Python中IO模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
- Python中的文件IO操作(读写文件、追加文件)
Python中文件的读写包含三个步骤:打开文件,读/写文件,关闭文件. 文件打开之后必须关闭,因为在磁盘上读写文件的功能是由操作系统提供的,文件作为对象,被打开后会占用操作系统的资源,而操作系统在同一 ...
- 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化
IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...
- [python 学习] IO操作之读写文件
一.读取全部文件: # -*- coding: utf-8 -*- f = open('qq_url.txt','r'); print f.read(); f.close(); 二.读取规定长度文件 ...
- Java文件(io)编程——文件字节流的使用
案例1: 演示FileInputStream类的使用(用FileInputStream的对象把文件读入到内存) 首先要在E盘新建一个文本文件,命名为test.txt,输入若干字符 public cla ...
- UNIX,基础知识,文件IO,文件和目录
2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...
- Java文件(io)编程——文件字符流的使用
案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...
随机推荐
- 多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
有这么一个表 )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') , 'ddd') , 'fff') ...
- [转]Java内存溢出详解及解决方案
原文地址:http://blog.csdn.net/xianmiao2009/article/details/49254391 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是 ...
- BZOJ4503: 两个串(bitset字符串匹配)
题意 题目链接 Sol Orz xudyh F个毛T啊..直接bitset一波就赢了啊...(虽然复杂度很假) 就是记录匹配串中每个元素出现的位置,将第\(i\)个位置的bitset右移\(i\)位后 ...
- MyEclipse快捷键大全,很实用
Eclipse本身很快的,但是加上了myeclipse后,就狂占内存,而且速度狂慢,那如何让Eclipse拖着myeclipse狂飚呢?这里提供一个: 技巧:取消自动validation valid ...
- Form 头行附件查询
查询Form的头行附件: SELECT st.short_text order_short_text, description order_attach_desc, pk1_value order_ ...
- Swagger2:常用注解说明
Swagger2常用注解说明 Spring Boot : Swagger 2使用教程:https://www.cnblogs.com/JealousGirl/p/swagger.html 这里只讲述@ ...
- springboot实现邮件发送
1.创建springboot项目. 2.创建好的项目如图: 在static目录下新建index.html. 3.点击启动项目 在浏览器的地址栏中访问:http://localhost:8080/ 访问 ...
- 最长上升子序列&&最长不下降子序列
百练2757: 题目描述: 对于给定的序列,求出最长上升子序列的长度. 题目链接:http://bailian.openjudge.cn/practice/2757 解题思路 一.动态规划 1. 找子 ...
- 【转】Android开发学习总结(一)——搭建最新版本的Android开发环境
最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1. ...
- php图像处理插件imagick安装(仅适用于86位,php5.4非安全环境-16px)
phpImageMagick-6.7.7-5-Q16-windows-dll(加测试代码,经测试,仅适用于86位,php5.4安全环境-16px) 下载地址:http://pan.baidu.com/ ...