目录
文件读写
读写文件
写入文件
Python 的 write()
方法用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带 b
,那写入文件内容时,str
(参数)要用 encode
方法转为 bytes
形式,否则报错:TypeError: a bytes-like object is required, not 'str'
。
语法: write()
方法语法如下:
fileObject.write([str])
参数: str:要写入文件的字符串。
返回值:
返回的是写入的字符长度。
实例:
将字符串 flag
写入 shell.txt文件
with open('shell.txt', 'w') as f:
length = f.write("flag")
print(length) # 4
'''
1. with open('shell.txt', 'w') as f: :这一行代码使用了 Python 的上下文管理器 (`with`) 来打开文件 'shell.txt' 以供写入,
文件模式为 'w',表示写入模式。使用上下文管理器可以确保在代码块执行完毕后,文件被正确关闭,即使发生异常也不例外。
2. length = f.write("flag"):这一行代码将字符串 `"flag"` 写入文件 `'shell.txt'` 中,并返回写入的字符数,这个字符数被赋值给变量 `length`。
3. print(length):这一行代码打印了变量 `length` 的值,即写入到文件中的字符数。
综上所述,代码的作用是打开一个文件 'shell.txt' 以写入模式,将字符串 "flag" 写入文件,并打印出写入的字符数。
'''
读取文件
Python 的 read()
方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
语法
read()
方法语法如下:
fileObject.read([size]);
参数:
size
:从文件中读取的字节数,默认为 -1,表示读取整个文件。
返回值:
返回从字符串中读取的字节。
实例:
读取 shell.txt 文件中的所有内容。
with open('shell.txt', 'w') as f:
f.write("flag")
with open('shell.txt', 'r') as f:
read_1 = f.read()
print(read_1)
'''
首先使用写入模式 ('w') 打开文件 'shell.txt',然后向文件中写入字符串 "flag"。接着,它再次打开同一个文件,但这次是以读取模式 ('r')。在读取模式下,
它读取文件的全部内容,并将其存储在变量 `read_1` 中,最后,它打印出变量 `read_1` 的值,即文件中的内容。
因此,如果文件 'shell.txt' 不存在,它将被创建并写入字符串 "flag",然后代码将读取该文件的内容并打印出来。
如果文件已经存在并且有内容,它将被覆盖为 "flag",然后读取并打印出来。
'''
python文件练习-1
向文件里写入列表
描述
给定一个文件路径 path,一个列表 list_1,请你向文件里写入这个列表。
def write_list(path: str, list_1: list):
with open(path,'w') as f:
f.write(str(list_1))
f.close()# 可写可不写
'''
函数名为 `write_list`,接受两个参数:
1. `path`:表示要写入列表的文件路径的字符串。
2. `list_1`:要写入文件的列表。
下面是函数的具体操作:
- 使用`open()`函数以`'w'`模式打开由`path`参数指定的文件,这意味着它打开文件以进行写入操作。如果文件不存在,则会创建它。如果文件已存在,则其内容将被覆盖。
- 然后使用文件对象 `f` 的 `write()` 方法将 `list_1` 的字符串表示写入文件。使用 `str()` 函数将列表转换为字符串,因为 `write()` 方法只能将字符串写入文件。
- 最后,使用 `close()` 方法显式关闭文件。虽然在这种情况下,由于使用了 `with` 语句,它会在退出块时自动关闭文件,调用 `f.close()` 是多余的,可以省略。
因此,当我们用文件路径和列表调用这个函数时,它会将列表的字符串表示写入指定的文件中。
'''
读写 JSON 文件
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C、C++、Java、JavaScript、Perl、Python等)。这些特性使 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
JSON 在 Python 中分别由 list
和 dict
组成。
json
模块提供了四个功能:dumps
、dump
、loads
、load
dumps
把数据类型转换成字符串dump
把数据类型转换成字符串并存储在文件中loads
把字符串转换成数据类型load
把文件打开从字符串转换成数据类型
写入 JSON 文件
简介
Python 模块中的 json
模块提供了一个名为 dump()
的方法,它将 Python 对象转换为适当的 JSON 对象。它是 dumps()
方法的一个小变种。
dump()
** 和 dumps()
的区别**
dump() | dumps() |
---|---|
当 Python 对象必须被存储在一个文件中时,dump() 方法就会被使用。 | dumps() 是在要求对象为字符串格式时使用的,用于解析、打印等。 |
dump() 需要将输出的 JSON 文件名作为一个参数来存储。 | dumps() 并不要求传递任何这样的文件名。 |
这种方法在内存中写入,然后单独执行写入磁盘的命令。 | 这个方法直接写到 JSON 文件中 |
较快的方法 | 慢 2 倍 |
dump()
** 语法:** json.dump(d, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None)
参数
indent
:它提高了 JSON 文件的可读性。可以传递给这个参数的可能值是简单的双引号(""),任何整数值。简单的双引号使每个键值对出现在新的一行。skipkeys
:如果键不属于标准允许的类型,如int
,float
,string
,None
或bool
,在转储它们时将产生错误。separator
:这个参数有一个或两个值。第一个值指定将一个键值对与另一个键值对分开的符号。下一个值指定将值和它的键分开的符号。sort_keys
:这个参数采用布尔值。如果它被设置为True
,键将以升序设置,否则,它们将以 Python 对象的形式出现。ensure_ascii
:这个参数也只取布尔值。如果它没有被设置为True
,非 ASCII 字符将被原封不动地转入输出文件。默认情况下,该值为True
。allow_nan
:它有助于序列化浮点数的范围。
实例
# 写入 JSON 数据
import json
data = {
'name': 'flag',
'age': 8
}
with open('demo.json', 'w') as f:
json.dump(data, f)
'''
import json: 这一行导入了Python的内置模块json,该模块允许我们操作JSON格式的数据。
data = {'name': 'flag', 'age': 8}: 这行定义了一个Python字典对象data,其中包含了两个键值对,一个是name,对应的值是字符串'flag',另一个是age,对应的值是整数8。
with open('demo.json', 'w') as f:: 这行代码打开了一个名为demo.json的文件,并且以写入模式(‘w’)打开。with语句是Python中用来处理文件IO的一种推荐方式,
它会在代码块执行完毕后自动关闭文件,无需手动调用f.close()。
json.dump(data, f): 这行代码使用了json.dump()函数,它接受两个参数:要序列化的Python对象(在这里是字典data),以及一个文件对象(在这里是f)。
它会把Python对象序列化为JSON格式的数据,并将其写入到文件对象对应的文件中。
整个代码的作用就是将Python字典对象data转换为JSON格式的数据,并写入到名为demo.json的文件中。
'''
读取 JSON 文件
json.loads()
方法可用于解析有效的 JSON 字符串并将其转换为 Python 字典。它主要用于将 JSON 数据组成的原生字符串、字节或字节数组反序列化为 Python 字典。
语法: json.loads(s)
参数: 它采用字符串、字节或字节数组实例,其中包含 JSON 文档作为参数。 返回: 它返回一个 Python 对象。
示例
读取 demo.json 的中的内容
# 写入 JSON 数据
import json
data = {
'name': 'flag',
'age': 8
}
with open('demo.json', 'w') as f:
json.dump(data, f)
# 读取文件
# load() 方法
with open('demo.json', 'r') as f:
print(json.load(f))
# loads() 方法
with open('demo.json', 'r') as f:
print(json.loads(f.read()))
'''
json.load(f) 方法。这个方法接受一个文件对象作为参数,从中读取 JSON 数据并将其解析为 Python 对象。
在这里,`f` 是之前打开的文件对象,通过 `json.load(f)` 将文件中的 JSON 数据加载到内存中,并返回对应的 Python 对象,最后通过 `print()` 打印出来。
json.loads(f.read()) 方法。首先,`f.read()` 读取了文件的内容作为字符串,然后 `json.loads()` 方法将这个字符串解析为 Python 对象。
与第一种方法不同,这里并没有直接传递文件对象给 `json.loads()`,而是将文件内容先读取到内存中,再进行解析。最后同样通过 `print()` 打印出解析后的 Python 对象。
'''
python文件练习-2
从文件中读取字典并修改它
描述
给定一个文件路径 path,文件格式为 json,请你将文件里的数据转换为字典,并修改其中 age 属性,将其改成 18,然后将修改后的字典写回文件里。
import json # 导入json包
def get_write_dict(path: str): # 定义函数,将路径作为参数带入
with open(path, 'r') as f: # 读取JSON文件并且将其解析成字典
data = json.load(f) # 调用json.load()方法,将数据转换为字典
data['age'] = 18 # 修改 age 属性
with open(path, 'w') as f:
json.dump(data, f) # 将修改后的字典重新写入到文件