python学习记录(三)(文件操作)

1.open() 函数用于打开一个文件

创建一个 file 对象,相关的方法才可以调用它进行读写。
open(name[, mode[, buffering]])
参数说明:

name : 一个包含了你要访问的文件名称的字符串值。

mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。

buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
注意:w、w+会覆盖已经存在的文件
在这里插入图片描述

2.fileObject.seek(offset[, whence]) 方法用于移动文件读取指针到指定位置

参数:
offset – 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
打开文件的模式有:

r ,只读模式【默认】
w,只写模式【不可读;不存在则创建;存在则清空内容;】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容;】

“+” 表示可以同时读写某个文件
r+, 读写【可读,可写,不会创建不存在的文件,从顶部开始写 会覆盖之前此位置的内容】
w+,写读【可读,可写,不存在则创建;存在则清空内容;】
x+ ,写读【可读,可写,不存在则创建,存在则报错
a+, 写读【可读,可写,不存在则创建;存在则只追加内容;】

"b"表示以二进制的方式操作
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b

**r+解释:**运行之前是两行五五开牛逼,运行后按顺序覆盖写入,第二行的牛逼依旧存在,并未覆盖
在这里插入图片描述

3.file对象常见函数

在这里插入图片描述

4.文件读取时常见的格式错误

在这里插入图片描述
原因:
读取文件中有中文
解决办法:
打开文件时以utf-8格式打开

f= open('C:/Desktop/PY/wuwukai.txt',encoding='utf-8')
print(f.read(10))
``
each_line 为f中的每一行
```python
for each_line in f :
    print(each_line)

5.注意:utf-8中,一个汉字占3个字节

原文:你们可能不知道只用20万赢到578万是什么概念
f.seek(0,0)
print(f.read(4))#read(4) 读了四个汉字
print(f.tell())# 此时的位置为12 即‘不’字的开头
f.seek(3,0)#0123 即们字开头 如输入1或2则会报错
print(f.read(4))
————————————————————下方为输出结果————————————————————
你们可能
12
们可能不

6.接受输入并保存为新文件

import os.path

def file_write(file_name):
    f = open(file_name+'.txt','w')
    print('请输入内容[单独树立\':w\'保存退出]:')

    while True :
        write_some = input()
        if write_some != (':w'|':w'): #不区分中英
            f.write('%s\n' % write_some)
        else :
            break
    
    f.close()

file_name = input('请输入文件名:')
if os.path.isfile(file_name+'.txt') : #判断是否本地是否存在同名文件
    print('请注意,若该文件夹中存在同名文件,请重新命名')
else:
    file_write(file_name)

7.txt文件比较

def file_compare(file1,file2):
    f1 = open(file1,encoding='utf-8')
    f2 = open(file2,encoding='utf-8')
    count = 0 #统计行数
    different = [] #统计不一样的数量

    for line1 in f1:
        line2 = f2.readline()
        count +=1
        if line1 != line2:
            different.append(count)

    f1.close()
    f2.close()
    return different

file1 =input('请输入第一个文件名:')+'.txt'
file2 =input('请输入第二个文件名:')+'.txt'
#也该核查是否存在该文件
while file1==file2:
    print('该两文件为同一文件,请重新输入第二个文件名:')
    file2 =input('请输入第二个文件名:')
different = file_compare(file1,file2)

if len(different) ==0:
    print('两个文件一样')
else:
    print('两个文件共用[%d]处不同:' %len(different))
    for each in different:
        print('第%d行不一样' % each)
发布了12 篇原创文章 · 获赞 0 · 访问量 6994
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章