案例分析
我们⾸先创建⼀个⼈⼯数据集,并存储在CSV(逗号分隔值)⽂件 ../data/house_tiny.csv中。
以其他格式存储的数据也可以通过类似的⽅式进⾏处理。下⾯我们将数据集按⾏写⼊CSV⽂件中。
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
f.write('NumRooms,Alley,Price\n') # 列名
f.write('NA,Pave,127500\n') # 每⾏表⽰⼀个数据样本
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
相对位置
输入结果
函数补充
os.makedirs(name, mode=0o777, exist_ok=False)
作用
用来创建多层目录(单层请用os.mkdir)
参数说明
name:你想创建的目录名
mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。
exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常
os.path.join()
os.path.join()函数用于路径拼接文件路径,可以传入多个路径
如果不存在以‘’/’开始的参数,则函数会自动加上
>>> import os
>>> print(os.path.join('path','abc','yyy'))
path\abc\yyy
存在以‘’/’’开始的参数,从最后一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
>>> print('1',os.path.join('aaa','/bbb','ccc.txt'))
1 /bbb\ccc.txt
>>> print('1',os.path.join('/aaa','/bbb','ccc.txt'))
1 /bbb\ccc.txt
>>> print('1',os.path.join('/aaa','/bbb','/ccc.txt'))
1 /ccc.txt
>>> print('1',os.path.join('/aaa','bbb','ccc.txt'))
1 /aaa\bbb\ccc.txt
>>> print('1',os.path.join('/aaa','bbb','/ccc.txt'))
1 /ccc.txt
同时存在以‘’./’与‘’/’’开始的参数,以‘’/’为主,从最后一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
>>> print('2',os.path.join('/aaa','./bbb','ccc.txt'))
2 /aaa\./bbb\ccc.txt
>>> print('2',os.path.join('aaa','./bbb','/ccc.txt'))
2 /ccc.txt
只存在以‘’./’开始的参数,会从”./”开头的参数的上一个参数开始拼接。
>>> print('2',os.path.join('aaa','./bbb','ccc.txt'))
2 aaa\./bbb\ccc.txt
前缀不同导致的文件路径继承不同
path='C:/yyy/yyy_data/'
>>> print(os.path.join(path,'/abc'))
C:/abc
>>> print(os.path.join(path,'abc'))
C:/yyy/yyy_data/abc
with open() as f
常见的读写操作:
with open(r'filename.txt') as f:
data_user=pd.read_csv(f) #文件的读操作
with open('data.txt', 'w') as f:
f.write('hello world') #文件的写操作
相关参数:
- r:以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
- rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
- r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
- rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
- w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
- ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
- a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
- ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
file对象的属性:
- file.read([size]) 将文件数据作为字符串返回,可选参数size控制读取的字节数
- file.readlines([size]) 返回文件中行内容的列表,size参数可选
- file.write(str) 将字符串写入文件
- file.writelines(strings) 将字符串序列写入文件
- file.close() 关闭文件
- file.closed 表示文件已经被关闭,否则为False
- file.mode Access文件打开时使用的访问模式
- file.encoding 文件所使用的编码
- file.name 文件名
- file.newlines 未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
- file.softspace 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用