IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python3 file操作 -> 正文阅读

[Python知识库]python3 file操作

文件读取

f =  open('data.txt', 'r')
# read()函数会逐个字节或字符读取文件中的内容
print(f.read())
f.seek(0)
print(f.tell())
print(f.read(6))

# 输出文件对象的相关信息
print(f) 
print('文件名为: ', f.name)
print('文件描述符为:', f.fileno)
print('是否连接到一个终端设备:', f.isatty())
print('文件是否关闭:', f.closed())
f.close()

#以二进制形式打开指定文件,该文件编码格式为 utf-8
f = open("data.txt",'rb+')
byt = f.read()
print(byt)
print("\n转换后:")
# decode() 方法将其转换成我们认识的字符串
print(byt.decode('utf-8'))
f.close()

# readline() 函数读取文件中的一行,包括最后的换行符'\n'
f = open('data.txt', 'r')
byt = f.readline()
print(byt)
f.seek(0,0)
byt = f.readline(7)
print(byt)
print(f.read())
f.seek(0, 0)

# readlines() 函数用于读取文件中的所有行,且连同行尾的换行符一块读取
byt = f.readlines()
print(byt)
f.seek(0, 0)
byt = f.readlines(7)
print(byt)

print('当前位置: %d' % f.tell())
f.seek(0, 0)
f.truncate(20)
print('文件内容:', f.readlines())
f.close()

文件写入

f = open('data.txt', 'w+')
f.write('Hello World!\nlizhong\npython\n')
# 使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符
f.writelines(['菜鸟教程\n', '中文说明'])
f.flush() # 实现将缓冲区的数据写入文件中
f.close()

上下文管理器

with 表达式 [as target]:
??代码块

with open('data.txt', 'w+') as f:
	f.write('\nPython 教程')

sys模块
os模块

>>> import os
>>> os.getcwd() # 获得当前工作路径
>>> os.chdir('/Users/lizhong/Downloads') # 更改当前工作目录 
>>> os.getcwd()

pickle 模块

pickle 模块

# dumps() 将 Python 中的对象序列化成二进制对象
import pickle
tup1 = ('I love Python', {1,2,3}, None)
p1 = pickle.dumps(tup1)
print(p1)

# loads() 将二进制对象转换成 Python 对象
t2 = pickle.loads(p1)
print(p2)


# dump() 将 Python 对象转换成二进制文件
import pickle
tup2 = ('I love Python', {1,2,3}, None)
with open('a.txt', 'wb') as f:
	pickle.dump(tup2, f)

# load() 将二进制对象文件转换成 Python 对象
with open('a.txt', 'rb') as f:
	t3 = pickle.load(f)
	print(t3)

fileinput 模块

fileinput 模块

1. 从标准输入中读取
当你的 Python 脚本没有传入任何参数时,fileinput 默认会以 stdin 作为输入源。

import fileinput
for line in fileinput.input():
    print(line)

2. 单独打开一个文件

import fileinput
with fileinput.input(files=('a.txt',)) as file:
    for line in file:
        print(f'{fileinput.filename()}{fileinput.lineno()}行: {line}', end='')

3. 批量打开多个文件
lineno() 改为 filelineno() 显示原文件真实行号。

import fileinput 
# files 接收一个包含多个文件名的列表或元组
with fileinput.input(files=('a.txt', 'data.txt')) as file:
    for line in file:
        print(f'{fileinput.filename()}{fileinput.lineno()}行: {line}', end='') 

搭配 glob 模块使用绝配。

import fileinput
import glob
for line in fileinput.input(glob.glob("*.txt")):
    if fileinput.isfirstline():
        print('-'*20, f'Reading {fileinput.filename()}...', '-'*20)
    print(str(fileinput.lineno()) + ': ' + line.upper(), end="")

4. 读取时备份文件

import fileinput
with fileinput.input(files=("a.txt",), backup=".bak") as file:
    for line in file:
        print(f'{fileinput.filename()}{fileinput.lineno()}行: {line}', end='') 

5. 标准输出重定向替换

import fileinput
with fileinput.input(files=('a.txt', 'data.txt'), inplace=False, backup='', mode='r', openhook=None) as f:
	for line in f:
		if fileinput.isfirstline(): # 判断当前读取的内容在当前文件中是否位于第1行
			print(fileinput.filename()) # filename()返回当前正在读取的文件名称
			print(fileinput.fileno()) # fileno()返回当前正在读取文件的文件描述符
		print(fileinput.filelineno(), line)
		print(fileinput.lineno())
fileinput.close()

列举一些实用案例
案例三:利用 fileinput 将CRLF文件转为LF

import sys
import fileinput

for line in fileinput.input(files=('a.txt', ), inplace=True):
    #将Windows/DOS格式下的文本文件转为Linux的文件
    if line[-2:] == "\r\n":  
        line = line + "\n"
    sys.stdout.write(line)

案例四:配合 re 做日志分析:取所有含日期的行

#--样本文件--:error.log
aaa
1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
bbb
1970-01-02 10:20:30  Error: **** Due to System Out of Memory...
ccc

#---测试脚本---
import re
import fileinput
import sys

pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'

for line in fileinput.input('error.log',backup='.bak',inplace=1):
    if re.search(pattern,line):
        sys.stdout.write("=> ")
        sys.stdout.write(line)

#---测试结果---
=> 1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
=> 1970-01-02 10:20:30  Error: **** Due to System Out of Memory...

案例五:利用fileinput实现类似于grep的功能

import sys
import re
import fileinput

pattern= re.compile(sys.argv[1])
for line in fileinput.input(sys.argv[2]):
    if pattern.match(line):
        print(fileinput.filename(), fileinput.filelineno(), line)

$ ./demo.py import.*re *.py
#查找所有py文件中,含import re字样的
addressBook.py  2   import re
addressBook1.py 10  import re
addressBook2.py 18  import re
test.py         238 import re

linecache 模块

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:50:39  更:2022-04-14 23:51:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:53:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码