Python基础学习笔记——文件与文件系统


Day.10


1.打开文件
文件的打开模式
在这里插入图片描述
完整的语法格式为:

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None)
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符

f = open('白头吟.txt',encoding='utf-8')
for i in f:
    print(i)
皑如山上雪,皎若云间月。闻君有两意,故来相决绝。

今日斗酒会,明旦沟水头。躞蹀御沟上,沟水东西流。

凄凄复凄凄,嫁娶不须啼。愿得一心人,白头不相离。

竹竿何袅袅,鱼尾何簁簁!男儿重意气,何用钱刀为!

2.文件对象方法
fileObject.close() 用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发ValueError错误。
fileObject.name() 返回文件名

f = open('白头吟.txt',encoding='utf-8')
print(f.name)
f.close()

白头吟.txt

fileObject.read([size]) 用于从文件读取指定的字符数,如果未给定或为负则读取所有。
fileObject.readline()读取整行,包括 “\n” 字符。
fileObject.readlines()用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。
fileObject.tell()返回文件的当前位置,即文件指针当前位置。

f = open('白头吟.txt','r',encoding='utf-8')
l = f.readline()
pos = f.tell()
print(pos)            #74
f.seek(0,0)
pos1 = f.tell()
print(pos1)           #0
ls = f.readlines()
print(l)
for i in ls:
    i.strip()
    print(i)
f.close()

皑如山上雪,皎若云间月。闻君有两意,故来相决绝。

皑如山上雪,皎若云间月。闻君有两意,故来相决绝。

今日斗酒会,明旦沟水头。躞蹀御沟上,沟水东西流。

凄凄复凄凄,嫁娶不须啼。愿得一心人,白头不相离。

竹竿何袅袅,鱼尾何簁簁!男儿重意气,何用钱刀为!

fileObject.seek(offset[, whence])用于移动文件读取指针到指定位置。
offset:开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。

f = open('白头吟.txt','r+',encoding='utf-8')
str = '作者:卓文君'
f.seek(0,2)
l = f.write(str)
f.seek(0,0)
for i in f:
    print(i)
f.close()

皑如山上雪,皎若云间月。闻君有两意,故来相决绝。

今日斗酒会,明旦沟水头。躞蹀御沟上,沟水东西流。

凄凄复凄凄,嫁娶不须啼。愿得一心人,白头不相离。

竹竿何袅袅,鱼尾何簁簁!男儿重意气,何用钱刀为!

作者:卓文君

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

import os

print("目录为: %s" % os.listdir(r'.\E'))
os.rmdir(r'.\E\A')
print("目录为: %s" % os.listdir(r'.\E'))

目录为: ['A']
目录为: []

os.getcwd()用于返回当前工作目录。
os.chdir(path)用于改变当前工作目录到指定的路径。
os.makedirs(path)用于递归创建多层目录,如果该目录已存在抛出异常。
os.remove(path)用于删除指定路径的文件。如果指定的路径是一个目录,将抛出 OSError。

import os

print("目录为: %s" % os.listdir(os.getcwd()))
os.removedirs(r'.\E\A')  # 先删除A 然后删除E
print("目录为: %s" % os.listdir(os.getcwd()))

os.rmdir(path)用于删除单层目录。仅当这文件夹是空的才可以, 否则, 抛出 OSError。
os.removedirs(path)递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
os.rename(src, dst)方法用于命名文件或目录,从 src 到 dst,如果 dst 是一个存在的目录, 将抛出 OSError。
os.system(command)运行系统的shell命令(将字符串转化成命令)
os.curdir指代当前目录(.)
os.pardir指代上一级目录(…)
os.sep输出操作系统特定的路径分隔符(win下为\,Linux下为/)
os.linesep当前平台使用的行终止符(win下为\r\n,Linux下为\n)
os.name指代当前使用的操作系统(包括:‘mac’,‘nt’)

import os

print(os.curdir)  # .
print(os.pardir)  # ..
print(os.sep)  # \
print(os.linesep)
print(os.name)  # nt

4.序列化
我们把变量从内存中变成可存储或传输的过程称之为序列化
Python提供了pickle模块来实现序列化。
pickle.dump(obj, file, [,protocol]) 将obj对象序列化存入已经打开的file中。

obj:想要序列化的obj对象。
file:文件名称。
protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
pickle.load(file) 将file中的对象序列化读出。
file:文件名称。

import pickle

dataList = [[1, 1, 'yes'],
            [1, 1, 'yes'],
            [1, 0, 'no'],
            [0, 1, 'no'],
            [0, 1, 'no']]
dataDic = {0: [1, 2, 3, 4],
           1: ('a', 'b'),
           2: {'c': 'yes', 'd': 'no'}}

# 使用dump()将数据序列化到文件中
fw = open(r'.\dataFile.pkl', 'wb')

# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)

# Pickle dictionary using protocol 0.
pickle.dump(dataDic, fw)
fw.close()

# 使用load()将数据从文件中序列化读出
fr = open('dataFile.pkl', 'rb')
data1 = pickle.load(fr)
print(data1)
data2 = pickle.load(fr)
print(data2)
fr.close()

# [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
# {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}

参考原文:https://blog.csdn.net/LSGO_MYP/article/details/102764862

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值