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
欢迎下次使用
相关推荐
转世成为计算机大神29 分钟前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海1 小时前
scala String
大数据·开发语言·scala
朝九晚五ฺ1 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
小喵要摸鱼1 小时前
Python 神经网络项目常用语法
python
qq_327342731 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍1 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦1 小时前
Scala的Array(2)
开发语言·后端·scala
yqcoder1 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
baivfhpwxf20231 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#
许嵩662 小时前
IC脚本之perl
开发语言·perl