Python语言零基础入门——文件

目录

一、文件的基本概念

1.文件

2.绝对路径与相对路径

3.打开文件的模式

二、文件的读取

三、文件的追加

四、文件的写入

五、with语句

六、csv文件

1.csv文件的读取

2.csv文件的写入

七、练习题:实现日记本


一、文件的基本概念

1.文件

  • 文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。计算机文件基本上分为二种:二进制文件(没有统一的字符编码)和纯文本文件(有统一的编码,可以被看做存储在磁盘上的长字符串)。
  • 纯文本文件编码格式常见的有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。
  • 二进制文件与文本文件的一个最主要的区别在于是否有统一的字符编码格式,二进制文件顾名思义是直接由0与1组成,无统一的字符编码。如图片文件(jpg、png),视频文件(avi)等。

2.绝对路径与相对路径

  • 绝对路径指的是从根目录开始到文件或者文件夹所在位置的完整路径。
  • 相对路径则是相对于当前工作目录来确定文件或者文件夹的位置。

3.打开文件的模式

|----------|------------------------------------------------------------------|
| mode | 解释 |
| r | 只读(默认模式,文件必须存在,不存在则抛出异常) |
| w | 只写,写之前会++清空++文件的内容,如果文件不存在,会创建新文件 |
| a | 追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件 |
| r+ | 可读可写 |
| w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
| b | rb、wb、ab、rb+、wb+、ab+意义和上面一样,用于二进制文件操作 |

二、文件的读取

  • 打开文件→读取文件的内容→关闭文件
python 复制代码
import os
# 打开文件

#相对路径
# f = open('test.txt',encoding='utf-8')
# f = open('../第9章/test2.txt',encoding='utf-8')
# f = open('../test3.txt',encoding='utf-8')

#绝对路径
path = os.getcwd()  # 获取当前py文件的路径
filename = path + '/test.txt'
f = open(filename,encoding='utf-8')

# 读取文件
context = f.read()  # 读取全部
# context = f.read(5)  # 读取5个字符
# context = f.readline()  # 读取一行
# context = f.readlines()  # 按行读取并且存入列表
print(context)

# 关闭文件
f.close()

运行结果:

python 复制代码
你好
我在学习Python
文件

三、文件的追加

  • 打开文件→写入文件→关闭文件
python 复制代码
# 打开文件
f = open('test3.txt',mode='a',encoding='utf-8')
# 写入文件
f.write('hello\n')
a = ['a\n','b\n','c\n']
f.writelines(a)
# 关闭文件
f.close()

此时test3.txt内容为:

python 复制代码
hello
a
b
c

四、文件的写入

  • 打开文件→写入文件内容→关闭文件
python 复制代码
# 打开文件
f = open('test2.txt',mode='w',encoding='utf-8')
# 写入文件内容

# f.write('你好,我是-17\n')
# f.write('python\n')

# f.writelines(['你好,我是-17\n','正在学习Python'])

context = ['你好,我是-17','正在学习Python']
for i in context:
    f.write(i+'\n')

# 关闭文件
f.close()

五、with语句

  • 用来关闭文件的关键字
python 复制代码
# 将文件打开并重命名为f
with open('test.txt',mode='r',encoding='utf-8') as f:
    context = f.read()
    print(context)

运行结果:

python 复制代码
你好,我是-17

六、csv文件

1.csv文件的读取

新建一个data.csv文件,

python 复制代码
import csv
with open('data.csv',mode='r',encoding='GBK') as f:
    cf = csv.reader(f)
    head = next(cf)
    scores = []
    for i in cf:
        scores.append(int(i[2]))
    print(sum(scores)/len(scores))

运行结果:

python 复制代码
88.5

2.csv文件的写入

python 复制代码
import csv

with open('data.csv',mode='w',encoding='GBK') as f:
    cf = csv.writer(f)
    cf.writerow(['ll','c','89'])
    lista = [['la','c','70'],['lb','python','85'],['lc','java','63']]
    cf.writerows(lista)

运行后,data.csv文件的内容如下:

例:随机生成姓名,科目,成绩等信息

python 复制代码
import csv,random
from my_package import my_tools
lista = []
def random_info(n=5):
    subjects = ['python','java','C++','html']
    for i in range(n):
        name = my_tools.random_string(random.randint(3,6))
        subject = random.choice(subjects)
        score = random.randint(50,100)
        lista.append([name,subject,score])

def average():
    with open('data.csv',mode='r',encoding='GBK') as f:
        cf = csv.reader(f)
        head = next(cf)
        scores = []
        for i in cf:
            scores.append(int(i[2]))
        return sum(scores)/len(scores)

def make_datas():
    with open('data.csv',mode='w',encoding='GBK') as f:
        cf = csv.writer(f)
        random_info()
        cf.writerows(lista)

make_datas()
result = average()
print('平均分是:',round(result,2))

七、练习题:实现日记本

python 复制代码
def write_txt():
    date = input('请输入今天的日期:')
    text = input('请输入日记内容:')
    filename = '日记本.txt'
    f = open(filename,mode='a',encoding='utf-8')
    f.write('17rjb\n')
    f.write(date+'\n')
    f.write(text + '\n')
    f.close()
    return True
def read_txt(day=-1):
    filename = '日记本.txt'
    f = open(filename, mode='r', encoding='utf-8')
    context = f.read()
    f.close()

    if day!='-1':
        lista = context.split('17rjb\n')
        for i in lista:
            if i[:10] == day:
                print(i)
                return True
        return False
    else:
        context = context.replace('17rjb\n','')
        print(context)
    return True

def quit():
    print('欢迎下次使用')
def menu():
    print('*'*30)
    print('''欢迎使用Python日记本系统
    1.写日记
    2.阅读日记
    0.退出系统''')
    print('*' * 30)

menu()
while True:
    op = input('请输入你的选择:')
    if op == '1':
        if write_txt():
            print('日记保存成功')
    elif op == '2':
        day = input('请输入你要查询的日期(查询全部请输入-1):')
        if read_txt(day):
            print('日记加载完毕')
        else:
            print('未查询到日记信息,请重试')
    elif op == '0':
        quit()
        break
    else:
        print('请重新选择')

测试结果:

python 复制代码
******************************
欢迎使用Python日记本系统
    1.写日记
    2.阅读日记
    0.退出系统
******************************
请输入你的选择:1
请输入今天的日期:2024.05.02
请输入日记内容:天气晴,心情佳
日记保存成功
请输入你的选择:1
请输入今天的日期:2024.05.03
请输入日记内容:测试0503
日记保存成功
请输入你的选择:1
请输入今天的日期:2024.05.04
请输入日记内容:测试0504
日记保存成功
请输入你的选择:2
请输入你要查询的日期(查询全部请输入-1):2024.05.02
2024.05.02
天气晴,心情佳

日记加载完毕
请输入你的选择:2
请输入你要查询的日期(查询全部请输入-1):-1

2024.05.02
天气晴,心情佳
2024.05.03
测试0503
2024.05.04
测试0504

日记加载完毕
请输入你的选择:0
欢迎下次使用
相关推荐
西猫雷婶7 分钟前
python学opencv|读取图像(十六)修改HSV图像HSV值
开发语言·python·opencv
lovelin+v1750304096617 分钟前
智能电商:API接口如何驱动自动化与智能化转型
大数据·人工智能·爬虫·python
weixin_5375904519 分钟前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
lsx20240623 分钟前
MVC 发布
开发语言
赵谨言28 分钟前
基于python+django的外卖点餐系统
经验分享·python·毕业设计
孤独的履行者36 分钟前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
qincjun40 分钟前
文件I/O操作:C++
开发语言·c++
CodeClimb1 小时前
【华为OD-E卷-最左侧冗余覆盖子串 100分(python、java、c++、js、c)】
java·python·华为od
深度学习lover1 小时前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别
小马超会养兔子1 小时前
如何写一个数字老虎机滚轮
开发语言·前端·javascript·vue