目录

Python 学习笔记——文件操作

文件操作

open

open() 是 Python 进行文件操作的关键函数,它有连个参数需要设置

  • 文件名 - 文件的名称,不多解释
  • 模式 - 决定打开的文件是否可读写以及其他属性
1
open('filename','mode')

仅以只读方式打开一个文件

1
f = open("filename.txt")

这样写也是一样的

1
f = open("filename","rt")

“r” 表示读

“t” 表示文本,这是函数默认设定好的,所以可以省略。

这里引入一下 w3school 的一个列表

There are four different methods (modes) for opening a file:

“r” - Read - Default value. Opens a file for reading, error if the file does not exist

“a” - Append - Opens a file for appending, creates the file if it does not exist

“w” - Write - Opens a file for writing, creates the file if it does not exist

“x” - Create - Creates the specified file, returns an error if the file exists

In addition you can specify if the file should be handled as binary or text mode

“t” - Text - Default value. Text mode

“b” - Binary - Binary mode (e.g. images)

以一个文件举例

1
2
3
/home/weepingdogel/test.txt
---
Hello!I love Python.

我们不写 mode 参数:

1
2
f = open('test.txt')
print(f.read())

执行后:

1
2
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

我们将它加上:

1
2
f = open('test.txt', 'rt')
print(f.read())

执行后:

1
2
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

结果是一模一样的。

读行

文件:

1
2
3
4
5
/home/weepingdogel/test.txt
---
Hello!I love Python.
Have a nice day!
Good luck!

当我们遇到一个多行文件的时候,我们可以选择只读取它其中一行 f.readline()

例如:

1
2
f = open('test.txt')
print(f.readline())

执行后:

1
2
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

我们需要两行的时候:

1
2
3
f = open('test.txt')
print(f.readline())
print(f.readline())

执行后:

1
2
3
4
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

Have a nice day!

如果我们需要三行:

1
2
3
4
f = open('test.txt')
print(f.readline())
print(f.readline())
print(f.readline())

执行后:

1
2
3
4
5
6
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

Have a nice day!

Good luck!

这个用法它会逐行读取,并且打印输出的时候是会换行的

在读配置文件的时候也许会用到吧…

当然我们也可以用 for 循环读一次性读全部:

1
2
3
f = open('test.txt')
for x in f:
    print(x)

执行后:

1
2
3
4
5
6
weepingdogel@WeepingDogel ~> python test.py
Hello!I love Python.

Have a nice day!

Good luck!

我觉得用 for 应该更有效率点…

关闭文件

这个没什么好讲的…

1
2
3
f = open('test.txt')
print(f.read())
f.close()

执行了也是跟上面差不多的效果

下面不给出调试结果了,太晚了。

创建

“x” 表示创建一个新文件,如果文件名指的那个文件已经存在就会报错

1
f = open("test.txt","x")

自己去试试啦,这个没什么好说的。

“a” 表示在已有文件上添加内容,它不会使文件原有的内容被删除或者被覆盖

例如:

1
2
f = open("test.txt","a")
f.write("加入内容 / content added.") # 这段字符串将会被添加到这个文件里

“w” 表示将会覆盖那个文件,它将会覆盖原有的内容

例如:

1
2
f = open("test.txt", "w")
f.write("加入内容 / content added.") # 文件将只会存在这段字符串

这里需要用到 os 这个模块,并用到里面的 os.remove() 函数,直接 import os 即可

1
2
import os
os.remove("test.txt")

典型例子

检测一个文件是否存在,如果存在就删除,不存在就提示

1
2
3
4
5
import os
if os.path.exists("test.txt"):
    os.remove("test.txt")
else:
    print("文件不存在")

删除目录

os.rmdir() 即可

1
2
import os
os.rmdir("foldername")

总结

这些就是基础的文件读写操作需要知道的东西啦…

如果看完没什么概念的话,可以试试下面这一大串代码

可以改改里面 open() 的 mode 参数试试

总结代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import os
import datetime
def sign():
    # 程序标识
    print(
'''
╭╮╭╮╭╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╱╱╱╭╮
┃┃┃┃┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╮╭╮┃╱╱╱╱╱╱╱╱┃┃
┃┃┃┃┃┣━━┳━━┳━━┳┳━╮╭━━╮┃┃┃┣━━┳━━┳━━┫┃
┃╰╯╰╯┃┃━┫┃━┫╭╮┣┫╭╮┫╭╮┃┃┃┃┃╭╮┃╭╮┃┃━┫┃
╰╮╭╮╭┫┃━┫┃━┫╰╯┃┃┃┃┃╰╯┣╯╰╯┃╰╯┃╰╯┃┃━┫╰╮
╱╰╯╰╯╰━━┻━━┫╭━┻┻╯╰┻━╮┣━━━┻━━┻━╮┣━━┻━╯
╱╱╱╱╱╱╱╱╱╱╱┃┃╱╱╱╱╱╭━╯┃╱╱╱╱╱╱╭━╯┃
╱╱╱╱╱╱╱╱╱╱╱╰╯╱╱╱╱╱╰━━╯╱╱╱╱╱╱╰━━╯
'''
    )
def filecrt(filename):
    # 文件创建
    if os.path.exists(filename): #检查文件是否存在
        print(str(datetime.datetime.now())+ ": 文件已存在")
        return 0
    else:
        f = open(filename,'x')
        f.close()
        print(str(datetime.datetime.now()) + ": 已创建文件: " + filename)
        return 1
def filewrt(filename):
    fruits = ['apple', 'banana', 'strawbarry','orange'] # 给出要写的内容
    # 文件写入操作
    f = open(filename, 'w')
    for fruit in fruits:
        f.write(fruit + '\n')
        print(str(datetime.datetime.now()) + ": 已写入" + fruit)
    f.close()
def filedel(filename):
    # 删除文件操作
    if os.path.exists(filename):
        os.remove(filename)
        print(str(datetime.datetime.now()) + ": 已删除" + filename)
    else:
        print(str(datetime.datetime.now()) + filename + "不存在")
def fileread(filename):
    print(str(datetime.datetime.now()) + ": 读取中.." )
    f = open(filename,'r')
    print("-" * 5 + "文件内容" + "-" * 5 + "\n")
    print(f.read())
    print("-" * 5 + "文件内容" + "-" * 5 + "\n")
sign()
if filecrt("test.txt") == 0:
    fileread("test.txt")
    filedel("test.txt")
else:
    filewrt("test.txt")
    fileread("test.txt")
    filedel("test.txt")