python file

文件 是由 字节 组成的信息,通常在磁盘上永久保存

文件分为2大类:文本文件 和 二进制文件

打开方式为 读(“r”) 写(“w”)

1. 读取 文件

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
方法一:
>>> test_file = open("temp.txt", "r")
>>> for line in test_file:
>>> print line
First line
Second line
Third line
>>> test_file.close()
方法二:
>>> test_file = open("temp.txt", "r")
>>> whole_file = test_file.read()
>>> for line in whole_file:
>>> print line
F
i
r
s
t
l
i
n
e
>>> test_file.close()
方法三:
# 通过readline读取第一行,让for 语句从readline结束位置 开始
>>> test_file = open("temp.txt", "r")
>>> a_line = test_file.readline()
>>> for line in test_file:
>>> print line
Second line
Third line
>>> test_file.close()

2. 文件模式

模式 打开方式 文件存在 文件不存在
‘r’ 只读 打开文件 出错
‘w’ 只写 清除文件内容 创建并打开新文件
‘a’ 只写 保留文件内容,将新数据添加到文件末尾 创建并打开新文件
‘r+’ 读写 从文件开始处读或重写文件内容 出错
‘w+’ 读写 清除文件内容 创建并打开新文件
‘a+’ 读写 保留文件内容,将新数据添加到文件末尾 创建并打开新文件

3. 换行符

操作系统 字符组合
unix & mac ‘\n’
windows ‘\r\n’
mac(pre os x) ‘\r’

4. csv 模块

4.1. csv.reader

csv.reader 每次循环,以字符串列表 返回文件中的一行

1
2
3
4
5
6
7
8
9
10
11
12
import csv
f_obj = open('file.csv', 'rU')
csv_reader = csv.reader(f_obj)
for row in csv_reader:
print row
f_obj.close()
['a', 'b', 'c', 'd', 'e']
...
...

4.2. csv.writer

和csv.reader一样,不过文件必须以写方式打开

1
2
3
4
5
6
7
8
9
>>> import csv
>>> write_file_obj = open('new_file.csv', 'w')
>>> csv_writer = csv.writer(write_file_obj)
# 这里使用 writerow 方法,一次写入一行到新文件
>>> for row in 'new_content'
>>> csv_writer.writerow(row)
>>> write_file_obj.close()

5. os 模块

1
2
3
>>> os.chdir("/abc/123") # 更改目录
>>> os.getcwd() # 当前工作目录
>>> os.listdir(".") # 列出目录

5.1. path 函数

os.path 以os.path开始的路径,表明是os模块中的一个 路径 子集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> os.path.isfile("/abc/123/file1")
# 如果path是一个存在的文件,返回True,否则返回False。
>>> os.path.isdir("/abc/123")
# 如果path是一个存在的目录,返回True,否则返回False。
>>> os.path.exists("/abc/123")
# 如果path存在,返回True。否则返回False。
>>> os.path.basename("/abc/123/file1")
# 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
>>> os.path.dirname("/abc/123/file1")
# 返回path的目录
>>> os.path.split("/abc/123/file1")
# 将path分割成目录和文件名,通过元组返回。
>>> os.path.splitext("/abc/123/file1")
# 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作。
>>> os.path.join("/abc", "123", "file1")
# 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。

5.2. walk 函数

os.walk(path_string) 参数psth_string为字符串,函数产生 3 个值:
1,当前目录名
2,目录的子目录列表
3,参数目录下每个目录中的文件列表

1
2
>>> for dir_name, dirs, files in os.walk("."):
>>> print dir_name, dirs, files