Python Day08

三种字符串:

```PYTHON
普通字符串:u"以字符作为输出单位"print(u"abc")
二进制:b"二进制字符串以字节为单位输出"print(b"abc")
原义字符串r"以字符为单位输出,能被转义的字符原样输出"print(r"a\nb\n")
```

文件操作三步骤:

```python 
1:打开文件:硬盘空间被操作系统持有,文件对象被应用程序持有
    f_o=open("当前地址下具体文件名""操作方式",encoding="utf-8")
2:操作文件:data=f.read()
3:释放文件:释放操作系统对硬盘空间的持有f.close


```

基础读、写:

```python
fr=open("source.txt","r",encoding="utf-8")
fr.read():将所有内容一次性读完
fr.read(10):指定读的字符数
fr.readline():一次读一行:文件换行符就是结束本次读取的依据,存为字符串类型
fr.readlines():将所有内容读存,按换行标识作为读取一次的依据,存为列表。存为列表。存为列表。
fr.close
fw=open("target.txt","w",encoding="utf-8")
fw.write("123\n"):一次写一行,行必须用\n标识
fw.writelines(["abc\n","def\n","xyz\n"]):一次写多行,必须用\n进行标识
fw.flush():向操作系统发送一条将内存中数据刷新到硬盘指令
fw.close():将内存中写的数据刷新到硬盘 然后  释放硬盘空间
 
```

with...open 语法

```PYTHON
withopen语句整合了文件资源打开与释放
   在with的缩进内可以操作文件对象,一旦取消缩进,资源就被释放了。
语法结构:
  withopen("target.txt","r",encoding="utf-8")as fr,
      

```

文件的操作模式:

```python
主模式:r、w、a、x:主模式只能选取一个,规定主要操作模式
从模式:t、b、+:从模式也必须出现,但个数不一定唯一,为主    模式添加功能。t、b两种只能有一个。从模式的组合只能是
    t+或者b+。
r:读,必须有文件才行
w:写,有的话就清空,没有的话添加
a:追加写,有的话就追加写,没有的话就新建
x:创建写,必须没有文件才行!有的话报错!
从:
t:默认,按字符操作
b:按字节操作
+:可读可写操作

主从模式组合:
rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a
    
rb: 文件必须提前存在,不存在报错,文件操作采用字节形式
wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式
ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式
    
r+t:文件必须存在、可读可写,默认从头开始替换写,按字符操作
w+t:文件存在清空不存在创建的可读可写,按字符操作
a+t:文件存在追加不存在创建的可读可写,按字符操作

 r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
w+b:文件存在清空不存在创建的可读可写,按字节操作
a+b:文件存在追加不存在创建的可读可写,按字节操作
```



文件操作编码问题:

```PYTHON
t模式下,原文采用什么编码,就选用什么编码,如果不选取,就跟操作系统一致。
b模式下,硬盘数据就是二进制文件,读出、写入都是二进制,不需要编码,没有必要再规定编码。

```

文件复制:

```python
with open('target.txt', 'r', encoding='utf-8') as rf:
    with open('target2.txt', 'w', encoding='utf-8')     as wf:
        for line in rf:
            wf.write(line)
with open('target.txt', 'rb') as rf:
    with open('target3.txt', 'wb') as wf:
        for line in rf:
            wf.write(line)
非文本文件只能采用b模式操作,不需要指定编码 - 因为根本不涉及编码解码过程
with open('001.mp4', 'rb') as rf:
    with open('002.mp4', 'wb') as wf:
        for line in rf:
            wf.write(line)
```

游标操作:

```python
1.游标操作的只能是字节,所以只能在b模式下进行操作
2.游标操作可以改变操作位置,r模式下可以改变位置进行操作
3.seek(offset,whence)
    offset:为整数,就是往后偏移多少个字节,负数往前偏移
    whence:0:代表游标在开头。1:游标在当前位置
            2:游标在末尾。
案例:你是日本人
with open('target.txt', 'rb') as f:
    # 先读6个字节
    data = f.read(6)
    print(data.decode('utf-8'))  # 你是
    # 将游标从头开始往后偏移3个字节
    f.seek(3, 0)
    data = f.read(6)
    print(data.decode('utf-8'))  # 是日
    # 从当前游标位置往前偏移3个字节
    f.seek(-3, 1)
    data = f.read(3)
    print(data.decode('utf-8'))  #

    f.seek(-3, 2)
    data = f.read(3)
    print(data.decode('utf-8'))  #
        
```

猜你喜欢

转载自www.cnblogs.com/huhongpeng/p/10754308.html