ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12_文件处理

2022-04-21 01:03:39  阅读:153  来源: 互联网

标签:fp 文件 12 file encoding 处理 __ path



# 文件处理
from os import path

'''
文件的处理包括读文件和写文件,读写文件就是请求操作系统打开一个文件,然后通过
操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件对象(写文件)
'''

# 1.文件的读取
'''
文件读取可分为以下步骤:
打开文件
读取文件内容
关闭文件

打开文件要使用open内建函数
open(file[,mode='r',encoding=None,errors=None])
参数说明: file:文件路径,可以是相对路径和绝对路径
mode:文件打开模式
encoding:文件编码方式,不用于二进制文件,一般是utf-8,gbk
errors:指定如何处理编码和解码错误,适用于文本文件
返回值:一个可迭代的文件对象

mode
r ==> 只读
w ==> 只写,写之前会清空文件的内容,如果文件不存在,会创建新文件
a ==> 追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件
r+ ==> 可读可写
w+ ==> 打开一个文件用于读写。如果文件存在则将其覆盖。如果文件不存在,创建新文件
a+ ==> 打开一个文件用于读写。如果文件已经存在,文件指针将会放在文件的结尾。文件
打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
b ==> rb,wb,ab,rb+,wb+,ab+意思和上面一样,用于操作二进制文件
二进制文件一般用于视频,音频,图片。

读取文件常用函数
函数
read([size]) ==> 读取文件(读取size字符,默认则是读取全部)
readline([size]) ==> 读取一行,如果指定size,将读入指定的字符数
readlines() ==> 把文件内容按行全部读入,返回一个包含所有行的列表

fp = open(path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8')
fp.write(',里斯爱上王五')

print(fp.readlines())
fp.close()

文件读写时有可能会产生IOError,一旦出错,最后的fp.close()就不会调用。
为了保证是否出错都能正确的关闭文件,可以使用try...finally来实现

try:
fp = open(path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8')
print(fp.readlines())
finally:
fp.close()

可以简写为:
with open(path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8') as fp:
print(fp.readlines())

read()和readlines()会一次读入文件全部内容,如果文件太大,会直接耗尽内存,
因为文件对象可迭代,所有可以使用for-in遍历文件
with open(path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8') as fp:
for line in fp:
print(line.strip())

注意⽆论是read、readline、readlines都会读⼊⾏末的\n,所以需要⼿动剔除\n
'''

# 2.写文件
'''
path = path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8'

1.打开文件
f = open(path,'w',encoding='utf-8')

2.写入内容,将内容写入到缓冲区
不会自动换行,需要换行,需要在字符串末尾添加换行符
f.write('里斯和张三是好朋友\n')

3.刷新缓冲区
f.flush() ==> 加速数据流动,保证缓冲区的流畅

4.关闭文件
f.close()

'''

# 3.移动文件指针
'''
文件的顺序是向后读写的,如果想要移动文件指针,可以使用seek方法:
file_obj.seek(offset,whence=0)
功能:移动文件指针
参数:offset是偏移量,正数表示从文件开头向文件末尾移动,负数相反
whence:文件指针位置,可选参数
SEEK_SET or 0表示文件开头位置。默认值
SEEK_CUR or 1表示当前位置
SEEK_END or 2文件末尾位置
with opem(path.dirname(path.abspath(__file__)) + '\\test','r+',encoding='utf-8') as fp:
fp.seek(5) ==> 向后移动5个指针
print(fp.read(3))
fp.seek(0) ==> 回到开头
print(fp.read(5))
print(fp.tell()) ==> tell()显示当前指针的位置

'''

# CSV文件处理
'''
读取CSV
import csv
with open(path.dirname(path.abspath(__file__)) + '\\test2','r+',encoding='utf-8')
csv_reader = csv.reader(fp,delimiter=";") ==> delimiter指定分隔符
header = next(csv_reader) ==> 获取第一行
print(header)

for line in csv_reader:
print(line)


写入csv
import csv

list1 = ['1','2','3',['4','5']]

with open(path.dirname(path.abspath(__file__)) + '\\test2','r+',newline='',encoding='utf-8') as f
csv_writer = csv.writer(f,delimiter='\t')
for line in list1:
csv.writer.writerow(line)
'''

标签:fp,文件,12,file,encoding,处理,__,path
来源: https://www.cnblogs.com/cll9/p/16172473.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有