Python之文件操作

一、文件操作步骤

创建文件对象---->调用文件方法---->关闭文件

1、创建文件对象

方法1:

f = open('文件名','方法',encoding='编码')

方法2:

with open('文件名','方法',encoding='编码') as f:
    ...
    ...

2、调用文件方法

(1)、r(只读模式)

先创建个文件'常伟',内容如下:

hello

创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只读’操作”,最后关闭对象

方法1:

f = open('常伟','r',encoding='utf8')
...
...
f.close()

方法2:

with open('常伟','r',encoding='utf8') as f:
    ...
    ...

注意:第一种类似赋值似的方式,当对文件操作完成后一定要关闭对象,所以后面的示例中都使用with方式创建对象,实际工作中建议以with方式为主。

f.read()                    

默认读出所有内容,可以限制具体读出多少位(如果文件内容有汉字,则一个汉字在该操作中占1位(3个指针位)))

示例:

创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只读’操作,先读取全部内容,再读取5个位数”,最后关闭对象(我是不会再文章中写出输出的,因为我想你试)

with open('常伟', 'r', encoding = 'utf8') as f:
    a = f.read()
print(a)
with open('常伟', 'r', encoding = 'utf8') as f:
    b = f.read(3)
print(b)

f.readline()

读取一行内容

with open('常伟', 'r', encoding = 'utf8') as f:
    a = f.readline()
print(a)

f.readlines()

读取所有内容到列表,一换行符为分割点(如果文件较大这种方式容易占满内存)

调整文件'常伟'的内容为:

帅的一逼cool!
人帅技术好
幽默不逗逼

示例:

with open('常伟', 'r', encoding = 'utf8') as f:
    a = f.readlines()
print(a)
注意:

在python中有个‘指针’的概念,默认我们对文件做只读操作时指针初始位置在0位,当我执行完f.read()读取全部内容后,指针会指向对象'f'的最后位置,如果这时我们继续对对象'f'操作,那么后续的操作都是从当前指针的位置开始进行的。

                                                                                     

这就是为什么f.read()示例中要创建两次文件对象,而不是在一个文件对象操作两次,那么有什么简便方法吗?当然有,那就是更改光标位置。

f.tell()

显示当前'指针位置'

with open('常伟', 'r', encoding = 'utf8') as f:
    print(f.tell())
    a = f.read()
    print(f.tell())
    print(a)

f.seek()

调整‘指针’到某个位置

with open('常伟', 'r', encoding = 'utf8') as f:
    print(f.tell())
    a = f.read()
    print(a)
    f.seek(0)
    b = f.read(3)
    print(b)

(2)、w(只写模式)

当文件以只写方式调用,那么在会先清空该文件在写入

创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只写’操作,”,最后关闭对象(如果文件不存在,则创建该文件;如果存在则清空该文件的内容)

with open('常伟', 'w', encoding = 'utf8') as f:
    ...

f.write()

写入内容

with open('常伟', 'w', encoding = 'utf8') as f:
    f.write('大帅逼')

(3)、a(追加写)

创建文件对象'f',内容为"打开文件‘常伟’,对其进行‘追加写入’操作",然后关闭该文件

with open('常伟', 'a', encoding = 'utf8') as f:
    ...

向上文创建的文件'常伟'中追加一条内容"而且技术屌的一逼!"

with open('常伟', 'a', encoding = 'utf8') as f:
    f.write('而且技术屌的一逼!')

flush()

将数据从缓存转移到磁盘

进度条功能实现

方法1:

import sys,time
for i in range(10):
    sys.stdout.write('*')
    sys.stdout.flush()
    time.sleep(0.2)

方法2:

import sys,time
for i in range(10):
    print('*',flush=True,end='')
    time.sleep(0.1)

truncate()

截断指定位置后的内容(注意汉字的一个编码为3,如果是汉字就要是3的整数倍不然会报错)

例如我有个文件"常伟",内容为“我是个大帅哥”,现在需要截取前两个字

with open('常伟','a',encoding='utf8') as f:
    f.truncate(6)

(4)、r+(读写模式,指针默认在0位置,最后位置开始写)

例如,我有个文件“常伟”,内容如下:

中国屌屌!!
台湾独杀杀!
钓鱼岛是中国的!
with open('常伟','r+',encoding='utf8') as f:
    a=f.readline()
    print(a)
    f.write("南海也是我们的!")

现在你猜猜文件"常伟"里面的内容。

(5)、w+(先清空,在读)

(6)、a+(光标默认在最后位置)

3、关闭文件

(1)、第一种创建方式

f.close()

(2)、第二种创建方式(缩进内容结束自动关闭)

4、其它知识

1、将某数据类型换为字符串

a = {
    'bj':{
        'tiananmen': 'zijincheng',
        'zhongnanhai': 'guojialingdaoren'
    },
    'shanghai':{
        'jichang':'tt',
        'TI': '2'
    }
}

a_to_str = str(a)
print(type(a_to_str))
print(a_to_str)

2、将字符串转回原来的数据类型

a = {
    'bj':{
        'tiananmen': 'zijincheng',
        'zhongnanhai': 'guojialingdaoren'
    },
    'shanghai':{
        'jichang':'tt',
        'TI': '2'
    }
}
a_to_str = str(a)
print(type(a_to_str))
print(a_to_str)
b = eval(a_to_str)
print(type(b))
print(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值