Python永久存储

1,  .exe   .txt   .ppt 等都是文件

2,打开文件

open() 这个函数里有很多参数,主要记住两个:

  • r 以只读方式打开文件  f=open(r"C:\Users\goodb\Desktop\record.txt")
  • w 以写入方式打开文件,会覆盖以存在的文件.

3,关闭文件 f.close()

4,文件的读取和定位:

1)读取 

  • read()   以字节为单位读取,若不设置参数,则会全部读取出来
  • readline() 在文件中读取一整行,从指针位置向后读取,遇到\n结束
  • list(f) 可以把文件整个内容放进列表里
  • tell()可以告诉当前指针所在位置

2)定位

  • seek(offset,from)  可以调整文件指针位置,表示从from偏移offset(自定义)字节   其中0表示文件起始位置,1表示文件当前位置,2代表文件末尾
  • 汉字占了两个字节
  • 将文件指针设置到文件起始位置,使用seek(0,0)即可

5,迭代读取文本文件的每一行

f.seek(0,0)

for each_line in f:

print(each_line)

6,文件的写入(确保打开模式之前有 w 或 a)

 f=open(r"C:\Users\goodb\Desktop\record.txt",'w')

f.write("写的内容会直接传到打开的文件里面")

>>>16  #传入内容的总数

f.close()

7,

  1.  f = open('E:/test.txt', 'w')   # A
  2. f = open('E:\test.txt', 'w')   # B
  3.  f = open('E://test.txt', 'w')  # C
  4.  f = open('E:\\test.txt', 'w')  # D

 B不能打印文字   D是用反斜杠将\打印出来    ’\‘,‘/’均可

8,编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上。

def file_view(file_name, line_num):
    # ,前面是文字,用''框起来,将后面打包放进前面,多个变量用()
    print('文件%s的前%s的内容如下:\n' % (file_name, line_num))
    f = open(file_name)
    for i in range(int(line_num)):  # input输入的是字符串,要强制转换成整形
        print(f.readline(), end='')  # 读取每行并换行
    f.close()  # 一定记得要关上


# 原来打开的文件与路径之间可以有文字,只要路径在r里面就行
file_name = input("请输入要打开的文件(C:\Users\Lenovo\Desktop\python\飞机游戏框架):")
line_num = input("请输入显示该文件前几行")
file_view(file_name, line_num)

注:input函数将输入的全转入字符串,所以r'' ''没意义,

       用的是“/”,看清方向 

C:/test.txt

9,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)

def file_view(file_name, line_num):
    if line_num.strip() == ':':#strip()函数用于删除字符串开头,结尾处
        begin = '1'
        end = '-1'
        
    (begin, end) = line_num.split(':')#split(':')去除指定字符

    if begin == '':#表示若:前面没有字符,则为begin
        begin = '1'
    if end == '':#表示若:后面没有字符,则为end
        end = '-1'

    if begin == '1' and end == '-1':
        prompt = '的全文'
    elif begin == '1':
        prompt = '从开始到%s' % end#注意前面均用字符串表示
    elif end == '-1':
        prompt = '从%s到结束' % begin
    else:
        prompt = '从第%s行到第%s行' % (begin, end)

    print('\n文件%s%s的内容如下:\n' % (file_name, prompt))

    begin = int(begin) - 1
    end = int(end)
    lines = end - begin

    f = open(file_name)  
    
    for i in range(begin):  # 用于消耗掉begin之前的内容
        f.readline()

    if lines < 0:
        print(f.read())#即一行,读取字节
    else:
        for j in range(lines):
            print(f.readline(), end='')#文章读取一整行
    
    f.close()

file_name = input(r'请输入要打开的文件(C:\\test.txt):')
line_num = input('请输入需要显示的行数【格式如 13:21 或 :21 或 21: 或 : 】:')
file_view(file_name, line_num)

10,编写一个程序,实现“全部替换”功能。
 


def file_replace(file_name, rep_word, new_word):
    f_read = open(file_name)

    content = []
    count = 0#初始化

    for eachline in f_read:#查找每行
        if rep_word in eachline:
            count = eachline.count(rep_word) #count感觉应该用这个(统计字符中某个字出现次数)
            eachline = eachline.replace(rep_word, new_word)#replace函数(旧字符串替换成新字符串)
        content.append(eachline)   #在列表末尾添加新的对象

    decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
                   % (file_name, count, rep_word, rep_word, new_word))

    if decide in ['YES', 'Yes', 'yes']:#在这三项之中
        f_write = open(file_name, 'w')#以写入方式打开
        f_write.writelines(content)#将内容写入文件 参数是列表 .write()参数是字符串
        f_write.close()

    f_read.close()


file_name = input('请输入文件名:')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name, rep_word, new_word)

11,write()与writelines()区别

1),writelines()中的参数只有一个。不同于write(),writelines()支持str同时也支持list写入
2),如果使用list写入txt文件,可以写入多行;如果使用str写入txt文件,则只能写入一行。

3),在list中的每个元素末尾必须加上’\n’的换行符,否则list中的各元素将写入一行之中

12,pickle的实质是利用算法将你的数据对象“腌制”成二进制文件存储起来。

13,

1)读取数据:pickle.dump(data,file)# 第一个参数是待存储的数据对象,第二个参数是目标存储的文件对象,注意用wb的模式打开文件。open('E:/my_list.pkl','wb')

2)存储数据:pickle.load(file) # 参数是目标存储的文件对象,注意要先使用'rb'的模式open文件

  • rb模式:以字节(二进制)方式读取文件中的数据

  • wb模式: 以字节(二进制)方式往文件中写入数据

  • ab模式: 以字节(二进制)方式往文件末尾追加写入数据

14

 编写一个程序,这次要求使用pickle将文件(record.txt)里的对话按照以下要求腌制成不同文件(没错,是第29讲的内容小改,考考你自己能写出来吗?):piQM2$v

  • 小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
  • 小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
  • 文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
import pickle #用import引入pickle模块

def save_file(boy, girl, count):
    file_name_boy = 'boy_' + str(count) + '.txt'# 文件名字命名
    file_name_girl = 'girl_' + str(count) + '.txt'

    boy_file = open(file_name_boy, 'wb') # 记得一定要加 b 吖
    girl_file = open(file_name_girl, 'wb') # 记得一定要加 b 吖

    pickle.dump(boy, boy_file)#使用dump保存数据
    pickle.dump(girl, girl_file)

    boy_file.close()
    girl_file.close()

def split_file(file_name):
    count = 1
    boy = []
    girl = []

    f = open(file_name)

    for each_line in f:
        if each_line[:6] != '======':
            (role, line_spoken) = each_line.split(':', 1)以:对字符串进行分割,分割次数是1
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)

            boy = []
            girl = []
            count += 1 

    save_file(boy, girl, count)
    f.close()

split_file('record.txt')

15,打开文件最后建议

with open ("C:/user/1.txt","r",encoding='utf-8') as f:

        f.read()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值