python 文件流

open | write | read

>>> with open(‘demo.txt‘ , ‘wt‘) as f:   #以文本(wt)形式写入操作

...     f.write("hello guohai")

12

>>> with open(‘demo.txt‘ , ‘rt‘) as f: #以文本(rt)形式读取操作

...     data = f.read()

>>> data

‘hello guohai‘

>>> with open(‘demo.txt‘ , ‘at‘) as f: #以文本(at)形式追加操作

...     f.write(‘hello zeopean‘)

13

>>> with open(‘demo.txt‘ , ‘rt‘) as f:

...     data = f.read()

>>> data

‘hello guohaihello zeopean‘

-- print 输出到文件中

with open(‘d:/work/test.txt‘, ‘wt‘) as f:

print(‘Hello World!‘, file=f)

  

-- 二进制读写

如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码

操作。比如:

 1 with open(‘somefile.bin‘, ‘rb‘) as f:
 2
 3 data = f.read(16)
 4
 5 text = data.decode(‘utf-8‘)
 6
 7 with open(‘somefile.bin‘, ‘wb‘) as f:
 8
 9 text = ‘Hello World‘
10
11 f.write(text.encode(‘utf-8‘))
12
13  

-- 判断文件是否存在

>>> import os

>>> if not os.path.exists(‘somefile‘):

... with open(‘somefile‘, ‘wt‘) as f:

... f.write(‘Hello\n‘)

... else:

... print(‘File already exists!‘)

...

File already exists!

StringIO | BytesIO

 1 -- StringIO
 2
 3 >>> s = io.StringIO()
 4
 5 >>> s.write(‘Hello World\n‘)
 6
 7 12
 8
 9 >>> print(‘This is a test‘, file=s)
10
11 15
12
13 >>> s.getvalue()
14
15 ‘Hello World\nThis is a test\n‘
16
17 >>>
18
19 >>> s = io.StringIO(‘Hello\nWorld\n‘)
20
21 >>> s.read(4)
22
23 ‘Hell‘
24
25 >>> s.read()
26
27 ‘o\nWorld\n‘
28
29 >>>
30
31
32
33 -- BytesIO
34
35 >>> s = io.BytesIO()
36
37 >>> s.write(b‘binary data‘)
38
39 >>> s.getvalue()
40
41 b‘binary data‘
42
43 >>>

readinto | bytearray | memoryview

 1 record_size = 32
 2
 3 buf = bytearray(record_size)
 4
 5 with open(‘somefile‘, ‘rb‘) as f:
 6
 7 while True:
 8
 9 n = f.readinto(buf)
10
11 if n < record_size:
12
13 break
14
15
16
17 另外有一个有趣特性就是 memoryview ,它可以通过零复制的方式对已存在的缓冲
18
19 区执行切片操作,甚至还能修改它的内容。比如:
20
21 >>> buf
22
23 bytearray(b‘Hello World‘)
24
25 >>> m1 = memoryview(buf)
26
27 >>> m2 = m1[-5:]
28
29 >>> m2
30
31 <memory at 0x100681390>
32
33 >>> m2[:] = b‘WORLD‘
34
35 >>> buf
36
37 bytearray(b‘Hello WORLD‘)

mmap

-- 内存映射的二进制文件

import os

import mmap

def memory_map(filename , access=mmap.ACCESS_WRITE):

size = os.path.getsize(filename)

fd = os.open(filename , os.O_RDWR)

return mmap.mmap(fd ,size , access=access)

size = 1000000

with open(‘data‘ , ‘wb‘) as f:

f.seek(size - 1)

f.write(b‘\x00‘)

m = memory_map(‘data‘)

print(len(m))

print(m[0:10])

# print(b‘hello daming‘ , file=m[0:11])

# m.close()

with open(‘data‘ ,‘rb‘) as f:

print(f.read(11))

os.path

-- basename | dirname | join | splitext | expanduser

 1 import os
 2
 3 >>> path = ‘demo.bin‘
 4
 5 >>> os.path.basename(path) #文件名
 6
 7 ‘demo.bin‘
 8
 9 >>> os.path.dirname(path) #文件路径
10
11 ‘‘
12
13 >>> os.path.join(‘tmp‘,‘data‘ , os.path.basename(path))  #路径拼接
14
15 ‘tmp\\data\\demo.bin‘
16
17 >>> path = ‘~/data/data.bin‘
18
19 >>> os.path.expanduser(path) #系统路径
20
21 ‘C:\\Users\\Administrator/data/data.bin‘
22
23 >>> os.path.splitext(path) #获取后缀名
24
25 (‘~/data/data‘, ‘.bin‘)

-- exists | isdir | islink | realpath

os.path.exists(‘/etc/passwd‘)   #判断文件是否存在

>>> os.path.isdir(‘user.data‘)  #判断是否是目录

False

>>> os.path.islink(‘demo.bin‘)  #判断是否是超链接

False

>>> os.path.realpath(‘demo.bin‘) #获取文件的绝对路径

‘E:\\zeopean\\pycode\\pyfunc\\demo.bin‘

-- getmtime | getsize 获取元数据

 1 >>> os.path.getmtime(‘demo.txt‘)
 2
 3 1459387735.7783203
 4
 5 >>> import time
 6
 7 >>> time.ctime(os.path.getmtime(‘demo.bin‘))
 8
 9 ‘Thu Mar 31 10:27:36 2016‘
10
11 >>> os.path.getsize(‘demo.txt‘)
12
13 47

-- listdir

>>> names = os.listdir(‘.‘)

>>> names

[‘closure.func.py‘, ‘closureInstance.py‘, ‘data‘, ‘demo.bin‘, ‘demo.txt‘, ‘file.

txt‘, ‘make_element.py‘, ‘mmap.demo.py‘, ‘readinto.demo.py‘, ‘yield.func.py‘]

tempfile

 1 --临时文件 TemporaryFile
 2
 3 from tempfile import TemporaryFile
 4
 5 f = TemporaryFile(‘w+t‘)
 6
 7 # Use the temporary file
 8
 9 ...
10
11 f.close()
12
13
14
15 --有名字的临时文件 NamedTemporaryFile
16
17 from tempfile import NamedTemporaryFile
18
19 with NamedTemporaryFile(‘w+t‘) as f:
20
21 print(‘filename is:‘, f.name)
22
23
24
25 -- 临时目录 TemporaryDirectory
26
27 from tempfile import TemporaryDirectory
28
29 with TemporaryDirectory() as dirname:
30
31 print(‘dirname is:‘, dirname)
32
33
34
35 -- 插件临时文件 mkstemp | mkdtemp
36
37 >>> import tempfile
38
39 >>> tempfile.mkstemp()
40
41 (3, ‘C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmp_jbpp74i‘)
42
43 >>> tempfile.mkdtemp()
44
45 ‘C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpkwsqedpa‘
46
47
48
49 -- 获取临时文件名  gettempdir
50
51 import tempfile
52
53 tempfile.gettempdir()
54
55 ‘C:\\Users\\ADMINI~1\\AppData\\Local\\Temp‘

Pickle

 1 -- 序列化对象
 2
 3 >>> import pickle
 4
 5 >>> f = open(‘somedata‘, ‘wb‘)
 6
 7 >>> pickle.dump([1, 2, 3, 4], f)
 8
 9 >>> pickle.dump(‘hello‘, f)
10
11 >>> pickle.dump({‘Apple‘, ‘Pear‘, ‘Banana‘}, f)
12
13 >>> f.close()
14
15 >>> f = open(‘somedata‘, ‘rb‘)
16
17 >>> pickle.load(f)
18
19 [1, 2, 3, 4]
20
21 >>> pickle.load(f)
22
23 ‘hello‘
24
25 >>> pickle.load(f)
26
27 {‘Apple‘, ‘Pear‘, ‘Banana‘}
时间: 2024-10-11 10:23:08

python 文件流的相关文章

python文件流

打开文件 文件的基本方法 迭代文件内容 打开文件 打开文件,可以使用自动导入的模块io中的函数open.函数open将文件名作为唯一必不可少的参数,并返回一个文件对象.如果只指定一个文件名,则获得一个可读取的文件对象. 如果当前目录中有此文件则可以打开,如果位于其他位置则需要指定完整的路径,如果指定文件不存在,则如下报错. 文件模式 如果需要写入文件,则需要通过指定模式.函数open的参数模式常见有如下: 模式 描述 'r' 读取模式(默认) 'w' 写入模式(文件不存在时创建它) 't' 文本

Python Day2 基础 操作文件流

1.列表.元组 操作                                                                    推荐书籍    追风筝的人       白鹿原   琳达看美国 2.字符串操作 3.字典操作 4.集合操作 5.文件操作 6.字符编码和转码 7.内置函数 列表,元祖 列表   name = [2,3,4,3]   name.copy()  浅copy        import copy      name2=cooy.deepndcopy

pythoning——9:python文件操作

字面意思,文件操作,无非就是找到文件,打开文件,写入/删除文件,找不到文件就去创建文件,并没有什么特殊的.如果你是这么认为的,那就太天真了,在python中提供了更为合理的数据管理方式.并非是你想像中的那么简单. 首先是打开文件,打开文件需要调用open函数,提供文件名,及打开方式.打开方式有(默认为r): r: 只读模式 w: 只写模式 a: 追加模式(从文件结尾追加) r+: 读写模式 w+: 读写模式(会先清空,后写入,然后读取,写读更合理吧) a+: 读写模式(还是只会从结尾处追加) r

重定向C库中stdio文件中的printf()函数,文件流--&gt;串口USART1

6.4 一些说明 数据属性可以重写同名的方法属性.这是为了避免在大型系统中产生问题的意外名称冲突.所以用一些减少冲突的常用方法是很有效果的.常用的方法包括:大写字母方法名称,用唯一的字符串来做为数据属性的名称(可以是个下划线_)或者用动词命名方法和用名字命名数据属性. 数据属性就像和对象的普通用户一样可以被方法引用.换句话说,类不能用来实现纯净的数据类型.事实上,在python中不能强制数据隐藏,一切基于约定.(另一方面,如C中写的,python的实现可以做到完全隐藏实现细节并且在必要是可以控制

C++、Python文件读写、定位等操作

一.C++文件流 1.文件流对象 C++中的文件流对象(fstream)是继承自iostream的一个类,其关系如下: fstream可以用IO运算符(>>和<<)读写文件,也可以用getline读文件. fstream特有的操作: fstream fstrm; 创建一个未绑定的文件流 fstream fstrm(s);   创建一个fstream,并打开名为s的文件,默认的文件模式依赖于fstream类型 fstream fstrm(s,mode); 与上一个构造函数类似,按指定

python文件的使用

文件 File 文件是用于数据存储的单位 文件通常用来长期存储数据 文件中的数据是以字节为单位进行顺序存储的 文件的操作流程 1. 打开文件 2. 读/写文件 3. 关闭文件 注: 任何操作系统,一个应用程序同时打开文件的数量有最大数限制 文件的打开函数: open(file, mode='rt') 用于打开一个文件,返回此文件流对象 如果文件打开失败,则会触发OSError类型的错误文件的关闭方法: F.close() 关闭文件,释放系统资源 # 1 打开文件 myfile = open('m

python3 文件流

文件流 # python里的打开一个文件用open(),如果不能打开,会抛出异常:OSError # 文件流的基本参数 # 1. file: 打开一个文件 # 2. mode: 打开的模式,默认模式为txt模式 # 3. buffering: 设置缓冲 # 4. encoding: 字符编码,一般用utf-8 # 5. errors: 报错级别 # 6. newline: 区分换行符 # 7. closefd: 传入的file参数类型 # 8. opener: # mode详情 # r 只读 #

五.Python文件IO和路径操作

目录 Python文件IO操作 上下文管理with 路径操作 01 Python文件IO操作: clumn column open 打开 read 读取 write 写入 close 关闭 readline 行读取 readlines 多行读取 seek 文件指针操作 tell 指针位置 打开文件 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No

Java 基础(四)| IO 流之使用文件流的正确姿势

为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 IO 流? 想象一个场景:我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中.那这个看似简单的过程,背后其实是数据的传输. 数据的传输,也就是数据的流动.既然是流动也就会有方向,有入方向和出方向.举个上传文件的栗子,现在有三个对象,文件.应用程序.上传的目标地址(服务器).简化的上传文件有两步: 应用程序读文件