python - 文件操作(学习笔记)

此文章是对个人在python文件部分知识学习的一个简单总结。

python文件

1.1 从文件中读取数据

文本文件可以存储的数据量非常多:天气数据,交通数据,社会经济数据,文学作品等等。每当需要分析和修改文件中的数据时,读取文件都是非常重要的,对数据分析更是如此。

1.1.1读取整个文件

pi_digits.txt文件中存储的是小数点后30位的圆周率。

with open('pi_digits.txt') as file_object:
    contents=file_object.read()
    print(contents)
####
3.1415926535
  8979323846
  2643383279

函数 open()接受一个参数:要打开的文件名。
open(‘pi_digits.txt’)返回一个表示文件pi_digits.tx的对象;Python将这个对象存储在我们后面需要使用的变量中。
关键字with在不需要访问文件后将其关闭。也可以使用open()和close()来打开和关闭文件。
不过我个人觉的使用with更方便一些。
read()方法用来读取这个文件的全部内容。

with open('pi_digits.txt') as file_object:
    contents=file_object.read()
    print(contents.rstrip())

这里输出是使用的rstrip()方法是用来删除字符末尾的空白。

1.1.2 文件路径

当我们将类似pi_digits.txt这样的简单文件名传递给函数open()时,Python将在当前执行的文件所在目录中查找文件。
而当我们有时需要打开不在程序文件所属目录中的文件时,我们就需要提供文件存储的路径,让python到系统特定位置去查找文件。
例如,你可能将程序文件存储在文件夹python_work中,而在文件夹python_work中,有一个名为text_files文件夹,用于存储程序文件操作的文本文件,虽然文件夹text_files包含在文件python_work中,但仅向open()传递位于该文件夹中的文件名也不可行,因为python只在python_work中查找,而不会在其子文件text_files中查找。要让python打开不与程序文件位于同一个目录中的文件,需要提供文件路径,它让python到系统特定位置去查找。
可以使用相对路径,例如:

with open('text_files\filename.txt') as file_object:

也可以使用绝对路径:

with open('C:\User\enmatthe\text_files\filename.txt') as file_object:

1.1.3 逐行读取文件

with open('pi_digits.txt') as file_object:
    for line in file_object:
        print(line)
 ####
 3.1415926535

  8979323846

  2643383279

我们发现逐行读取这样操作由于每行末尾的换行符作用使得各行之间空白增多。
所以我们可以使用rstrip()方法来进行处理

print(line.rstrip())

1.1.4 创建一个包含文件各行内容的列表

with open('pi_digits.txt') as file_object:
    lines=file_object.readlines()
for line in lines:
    print(line.rstrip())
####
3.1415926535
  8979323846
  2643383279

使用with时,open()返回的文件对象只能在with代码块内使用,
如果想在with代码块外访问文件内容,可以在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用列表就可以了。

1.1.5 使用文件的内容

下面是一个简单的使用示例:

with open('pi_digits.txt') as file_object:
    lines=file_object.readlines()
pi_string=''
for line in lines:
    pi_string+=line.rstrip()
print(pi_string)
print(len(pi_string))
####
3.1415926535  8979323846  2643383279
36

如果使用strip()方法来代替rstrip()可以输出如下结果:

for line in lines:
    pi_string+=line.strip()
####
3.141592653589793238462643383279
32

1.1.6 包含一百万位的大型文件

pi_million_digits.txt文件中存放着精确到小数点后百万位的圆周率。

with open('pi_million_digits.txt') as file_object:
    lines=file_object.readlines()
pi_string=''
for line in lines:
    pi_string+=line.strip()
print(pi_string[:82]+'...')#我们这里只打印小数点后80位
print(len(pi_string))
####
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899...
1000002

由此我们知道,对于你要处理的数据量,python没有任何限制;,只要系统内存足够,我们想处理多少数据都可以。

1.2 写入文件

1.2.1 写入空文件


```python
filename='programming.txt'
with open(filename,'w') as file_object:
    file_object.write('I love programming')

此时可以看到在项目中新生成了如下文件:

在这里插入图片描述
我们打开该文件查看里面内容
在这里插入图片描述
可见我们刚才所写的内容。
此案例中,调用时open()我们提供了两个实参,第一个代表所要打开的文件名,第二个‘w’告诉python,我们要以写的形式打开这个文件。
打开文件时,可指定【读取模式(‘r’)】,【写入模式(‘w’)】,【附加模式(‘a’)】等操作模式
本案例中由于我们要写入的文件实现不存在,所以python会自动创建一个文件然后进行写入操作。

1.2.2 写入多行

filename='programming.txt'
with open(filename,'w') as file_object:
    file_object.write('I love programming\n')#输入多行数据时可以使用 \n 来进行换行
    file_object.write('I love creating new games.\n')

1.2.3 附加到文件

filename='programming.txt'
with open(filename,'a') as file_object:
    file_object.write('I also love finding meaning in large datasets.\n')
    file_object.write('I love creating apps that can run ina browser\n')

运行程序后可以看到如下结果:
在这里插入图片描述
这里我们使用 ‘a’ 是进行附加操作,此时写入的内容不会覆盖远些的内容,而是在文件末尾继续添加写入的内容。

1.3 存储数据

很多程序要求用户输入某种信息,例如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。要保存这些信息,一种简单的方法是使用json()模块来存储数据。
模块json能让我们将简单的的python数据结构转存储到文件中,并在文件运行时加载该文件中的数据。我们还可以使用json在python程序之间分享数据。

1.3.1 使用json.dump()和json.load()

存储一组数字的例子:

import json
numbers=[2,3,5,7,11,13]
filename='numbers.json'
with open(filename,'w') as f_obj:
    json.dump(numbers,f_obj)

json.dump()是将数字列表存储到文件numbers.json中
可以看到生成了如下的文件
在这里插入图片描述
打开文件可以看到写入的列表:
在这里插入图片描述
下面再写一个程序,使用json.load()将这个列表读取到内存中:

import json
filename='numbers.json'
with open(filename,) as f_obj:
    numbers=json.load(f_obj)
print(numbers)
####
[2, 3, 5, 7, 11, 13]

保存和读取用户生成的数据

对于用户生成的数据,使用json保存他们大有裨益,因为如果不以某种方式进行存储,等程序运行停止时用户信息将丢失。
下面看一个例子:

import json
username=input("What is your name? ")
filename='username.json'
with open(filename,'w') as f_obj:
    json.dump(username,f_obj)
    print("We'll remember you when you come back,"+ username+"!")
####
What is your name? Alice
We'll remember you when you come back,Alice!

与此同时,我们可以看到生成了文件
在这里插入图片描述
打开之后可以见到我们输入的名字:
在这里插入图片描述
我们在编写一个程序读取之前username.json文件中存储的名字

import json
filename='username.json'
with open(filename) as f_obj:
    username=json.load(f_obj)
    print("Welcome back, "+username+"!")
####
Welcome back, Alice!

下面我们·将这两个程序合道一个程序,当这个程序运行时,我们尝试从文件username.json中获取用户名,因此我们首先编写一个尝试恢复用户名的try代码块。如果这个文件不存在,我们就在except模块中提示输入用户名,并将其存储在username.json中,以便程序再次运行时能够获取它。

import json
filename='username.json'
try:
    with open(filename) as f_obj:
        username=json.load(f_obj)
except FileNotFoundError:
    username=input("What is your name? ")
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
        print("We'll remembr you when you come back, " + username + "!")
else:
    print("Welcome back, "+username+"!")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值