本文主要记录学习的python中文件处理部分,主要分为三个模块:Python文件I/O,文件的基础处理(包括打开、关闭、定位等)、利用OS模块进行文件/目录的处理。
一、Python 文件I/O
1、输出方式:print()函数
2、输入方式:input()函数
print("----输入和输出------")
str = input("请输入:") #in
print("输入的内容是:",str)#out
结果如下 :
----输入和输出------
请输入:hello,friends
输入的内容是: hello,friends
二、文件的基础处理
1、打开和关闭文件
(1)open函数
Python中open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
先使用PYTHON内置的open()函数打开一个文件,创建一个file,即xx.txt文件,才能对文件进行读写处理。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
常用的语法格式为:
open(file, mode='r')
常用的mode:
这里 ‘r’ 表示读取模式。其他常用的模式有:
- ‘w’:写入模式,如果文件不存在则创建它,如果文件存在则覆盖它。
- ‘a’:追加模式,如果文件不存在则创建它,如果文件存在则在末尾追加内容。
- ‘r+’:读写模式,文件必须存在。
- ‘w+’:写读模式,如果文件不存在则创建它,如果文件存在则覆盖它。
- ‘a+’:追加读模式,如果文件不存在则创建它,如果文件存在则在末尾追加内容。
完整的语法格式:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
mode的参数有:(默认为文本模式,如果要以二进制模式打开,加上 b 。)
(2) close()函数
close()刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。最好养成用 close()方法关闭文件。
使用 with 语句关闭文件
为了确保文件在使用完毕后被正确关闭,可以使用 with 语句。这样就不需要显式地调用 close() 方法了:
# read()
print("----使用close()的两种方式-----")
file = open('filename.txt', 'r')
content = file.read() # 读取整个文件内容
print(content)
file.close() # 读取完毕后记得关闭文件
print ("第一种是否已关闭 : ", file.closed)
with open('filename.txt', 'r') as file:
content = file.read()
print(content)
# 文件在这里会自动关闭
print ("第二种是否已关闭 : ", file.closed)
# write()
file = open('filename.txt', 'w')
file.write('moon')
file = open('filename.txt', 'r')
content = file.read() # 读取整个文件内容
print(content)
file.close() # 读取完毕后记得关闭文件
print ("是否已关闭 : ", file.closed)
结果如下:
----使用close()的两种方式-----
sun
第一种是否已关闭 : True
sun
第二种是否已关闭 : True
moon
是否已关闭 : True
(3) File对象的属性
当一个文件被打开后,则有一个file对象,我们可以得到此文件的各种信息。
主要包括file.name、file.mode、file.closed
print("----file对象属性-----")
dem = open("demo.txt", "w")#打开文件,w是写模式
print ("文件名: ", dem.name)
print ("是否已关闭 : ", dem.closed)
print ("访问模式 : ", dem.mode)
dem.close()# 关闭打开的文件
print ("是否已关闭 : ", dem.closed)
输出结果如下:
----file对象属性-----
文件名: demo.txt
是否已关闭 : False
访问模式 : w
是否已关闭 : True
2、file对象常用的函数
使用open()函数来创建file对象,file对象常用的函数有:
(1)file 读写
格式如下:
fileObject.write(string)
fileObject.read([count])#count为读取字节数,若不传入,则默认读取全部
详细请参考:python中.txt文件的使用【txt读取和写入】
简单示例:
file = open('file1.txt', 'w')
file.write('你好\n 朋友! ')
file.close()
file = open('file1.txt', 'r')
content = file.read() # 读取整个文件内容
print(content)
file.close()
结果如下:
你好
朋友!
(2)文件定位
格式如下:
fileObject.tell()
#定位文件内字节的当前位置, 即,下一次的读写会发生在文件开头这么多字节之后。
fileObject.seek(offset [,from])
#改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。from:有三种模式,0、1、2
示例如下:
print("----file定位-----")
# 打开一个文件
dem = open("demo.txt", "r+")
str = dem.read(10)
print("读取的字符串是str: ", str)
# 查找当前位置
position = dem.tell() #tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。
print("当前文件位置 : ", position)
str1 = dem.read() # 下一次的读写会发生在文件开头这么多字节之后。
print("下次读取的字符串是str1 : ", str1)
# 把指针再次重新定位到文件开头 seek(offset [,from])
position = dem.seek(0, 0) #from设为0,着将文件的开头作为移动字节的参考位置。
#position = dem.seek(0, 1) # from设为1,则使用当前的位置作为参考位置。
#position = dem.seek(0, 2) #from设为2,则该文件的末尾将作为参考位置。
str = dem.read()
print("重新读取字符串 : ", str)
# 关闭打开的文件
dem.close()
结果如下:
----file定位-----
读取的字符串是str: hello,boy,
当前文件位置 : 11
下次读取的字符串是str1 : sunshine
重新读取字符串 : hello,boy,sunshine
三、利用OS模块进行文件/目录的处理
要使用os模块,先进行导入该模块,利用dir()查询该模块的函数。
如下所示:
>>> import os
>>> dir(os)
['DirEntry', 'EX_OK', 'F_OK', 'GenericAlias', 'Mapping', 'MutableMapping',
'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM',
'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY',
'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO',
'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET',
'TMP_MAX', 'W_OK', 'X_OK', '_AddedDllDirectory', '_Environ', '__all__',
'__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__',
'__spec__', '_check_methods', '_execvpe', '_exists', '_exit', '_fspath',
'_get_exports_list', '_wrap_close', 'abc', 'abort', 'access',
'add_dll_directory', 'altsep', 'chdir', 'chmod', 'close', 'closerange',
'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup',
'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe',
'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode',
'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_blocking',
'get_exec_path', 'get_handle_inheritable', 'get_inheritable',
'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid',
'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'listdrives',
'listmounts', 'listvolumes', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name',
'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read',
'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir',
'scandir', 'sep', 'set_blocking', 'set_handle_inheritable', 'set_inheritable',
'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_result',
'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd',
'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink',
'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask',
'uname_result', 'unlink', 'unsetenv', 'urandom', 'utime', 'waitpid',
'waitstatus_to_exitcode', 'walk', 'write']
>>>
以下仅举例常用的函数。
1、重命名和删除文件
格式如下:
os.rename(current_file_name, new_file_name)#重命名
os.remove(file_name)#删除文件
示例如下:
import os
os.renames("file1.txt","file2.txt")# file1被重命名为file2。
file2 = open('file2.txt', 'r')
content2 = file2.read() # 读取整个文件内容
print(content2)
file2.close()
结果如下:file1被file2代替,这是已经不存在文件file1.txt
import os
file2 = open('file2.txt', 'r')
content2 = file2.read() # 读取整个文件内容
print(content2)
file2.close()
os.remove("file2.txt")
结果:
file2.txt已经被删除。相应路径下已无此文件。
2、利用os模块处理目录
文件包含在各个不同的目录之下,OS模块有很多方式可以轻松创建、删除和更改目录。
常用方式:
os.mkdir("newdir")#在当前目录下创建新目录,提供新目录的名字
os.chdir("newdir")#改变当前的目录,提供新目录名字
os.getcwd() # 显示当前的工作目录
具体函数使用,请参考:Python OS 模块函数说明