专业编程基础技术教程

网站首页 > 基础教程 正文

Python 3 基础教程 - 文件 I/O python3.7文档

ccvgpt 2024-12-25 10:43:23 基础教程 3 ℃

I/O 输入/输出(Input/Output)。python 内置了很多I/O函数,主要是针对键盘输入,文件读取和保存,屏幕显示等。

打印到屏幕

将内容打印到屏幕的最简单方法是使用 print()函数,可以在其中传递零个或多个以逗号分隔的表达式。该函数将传递的表达式转换为字符串并将结果写入标准输出。

Python 3 基础教程 - 文件 I/O python3.7文档

str = "Java"
print('Python', str, 'development')
#屏幕显示结果
Python Java development

读取键盘输入

在 Python 3 中,input() 函数以字符串形式从键盘读取数据,而不管它是否用引号('' 或 "" )引起来。input([prompt]) 函数只是假定输入是一个有效的 Python 表达式并将计算结果返回。

x = input("please input:")   #输入 good 之后,下是如下行内容
please input:good

打开和关闭文件

Python 默认提供了操作文件所必需的基本函数和方法。可以使用文件对象执行大部分文件操作。

打开文件

在读取或写入文件之前,必须使用内置的 open() 函数打开它。该函数创建一个文件对象,该对象将用于调用与其关联的其他支持方法。语法:

file object = open(file_name [, access_mode][, buffering])

参数说明:

  • file_name 参数是一个字符串值,其中包含要访问的文件的名称。
  • access_mode 确定必须打开文件的模式,即读取、写入、追加等。这是一个可选参数,默认文件访问模式是读取 (r)。
  • buffering - 如果缓冲值设置为 0,则不会发生缓冲。如果缓冲值为 1,则在访问文件时执行行缓冲。如果将缓冲值指定为大于 1 的整数,则缓冲操作将以指定的缓冲区大小执行。如果为负,则缓冲区大小为系统默认值(默认行为)。

打开文件的不同模式:

  • r:以只读方式打开文件。文件指针位于文件的开头。这是默认模式。
  • rb:以二进制格式打开一个只读文件。文件指针位于文件的开头。这是默认模式。
  • r+:打开文件进行读写。文件指针放在文件的开头。
  • rb+:以二进制格式打开文件进行读写。文件指针放在文件的开头。
  • w:打开一个只写文件。如果文件存在则覆盖该文件。如果该文件不存在,则创建一个新文件用于写入。
  • wb:打开一个仅以二进制格式写入的文件。如果文件存在则覆盖该文件。如果该文件不存在,则创建一个新文件用于写入。
  • w+:打开文件进行写入和读取。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个新文件用于读写。
  • wb+:打开一个文件,以二进制格式写入和读取。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个新文件用于读写。
  • a:打开一个文件进行追加。如果文件存在,文件指针位于文件末尾。即文件处于追加模式。如果该文件不存在,它会创建一个新文件用于写入。
  • ab:打开一个文件以以二进制格式追加。如果文件存在,文件指针位于文件末尾。即文件处于追加模式。如果该文件不存在,它会创建一个新文件用于写入。
  • a+:打开一个文件进行追加和读取。如果文件存在,文件指针位于文件末尾。该文件以追加模式打开。如果该文件不存在,它会创建一个新文件用于读写。
  • ab+:打开一个文件,以二进制格式追加和读取。如果文件存在,文件指针位于文件末尾。该文件以追加模式打开。如果该文件不存在,它会创建一个新文件用于读写。

File对象的属性

一旦一个文件被打开,就有了一个文件对象,就可以获得与该文件相关的各种信息。

  • file.closed 如果文件已关闭则返回 true,否则返回 false。
  • file.mode 返回打开文件的访问模式。
  • file.name 返回文件的名称。

注意:如果你安装并使用 Jupyter notebooks的话,在“命令提示符”窗口中,输入命令:jupyter notebook,启动之后,会看到:Serving notebooks from local directory: xxx,xxx这里就是你目前程序的运行目录,你可以直接把想读取内容的文件放到这里。

例如,创建一个 test.txt 文件,内容为空。

txt = open("test.txt", "wb")
print ("Name of the file: ", txt.name)
print ("Closed or not : ", txt.closed)
print ("Opening mode : ", txt.mode)
txt.close()

运行结果

Name of the file:  test.txt
Closed or not :  False
Opening mode :  wb

close() 方法

File对象的 close() 方法会刷新所有未写入的信息并关闭文件对象,之后无法再进行写入。当一个文件的引用对象被重新分配给另一个文件时,Python 会自动关闭一个文件。最好使用 close() 方法关闭文件。语法:

fileObject.close();

例如:

txt = open("test.txt", "wb")
print ("Name of the file: ", txt.name)
txt.close()

读写文件

File对象提供了一组访问方法,可以使用 read() 和 write() 方法来读取和写入文件。

write() 方法

write() 方法将任何字符串写入打开的文件。重要的是要注意 Python 字符串可以包含二进制数据而不仅仅是文本。write() 方法不会在字符串末尾添加换行符 ('\n')。语法:

fileObject.write(string);

这里传递的参数 string 是要写入打开文件的内容。

例如:

txt = open("test.txt", "w")
txt.write( "Write the first line into file.\n")
txt.close()

如果打开test.txt文件将会看到一行内容:Write the first line into a file.

read() 方法

read() 方法从打开的文件中读取字符串。重要的是要注意 Python 字符串可以包含二进制数据。除了文本数据。语法:

fileObject.read([count]);

这里,传递的参数 count 是要从打开的文件中读取的字节数。此方法从文件开头开始读取,如果缺少计数,则它会尝试尽可能多地读取,可能直到文件末尾。

例如:

txt = open("test.txt", "r+")
str = txt.read(20)
print ("读取到的内容为 : ", str)

txt.close()

运行结果:

读取到的内容为 :  Write the first line

文件定位

tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。

seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

以上面创建的文件 test.txt 为例:

txt = open("test.txt", "r+")
str = txt.read(10)
print ("Read String is : ", str)

# 读取的当前位置
position = txt.tell()
print ("Current file position : ", position)

# 继续读取文档内容
str = txt.read(10)
print ("Next Read String is : ", str)

# 将当前位置重置为0,即文档开头位置
position = txt.seek(0, 0)
str = txt.read(10)
print ("Again read String is : ", str)

txt.close()

运行结果:

Read String is :  Write the 
Current file position :  10
Next Read String is :  first line
Again read String is :  Write the 

重命名和删除文件

Python os 模块提供了一些方法来帮助您执行文件处理操作,例如重命名和删除文件。要使用这个模块,需要先导入它,然后可以调用任何相关的函数。

rename() 方法,语法:

os.rename(current_file_name, new_file_name)

有两个参数,当前文件名和新文件名。

import os
# 重命名文件名   
os.rename( "test.txt", "test1.txt" )

remove() 方法,通过提供要删除的文件的名称作为参数来删除文件。语法:

os.remove(file_name)

参数为要删除的文件的名称。

import os

os.remove("text1.txt")

Python里的目录

所有文件都包含在不同的目录中,Python 处理这些也没有问题。 os 模块有几个方法可以帮助您创建、删除和更改目录。

mkdir() 方法

可以使用 os 模块的 mkdir() 方法在当前目录中创建目录。您需要为此方法提供一个参数,其中包含要创建的目录的名称。语法:

os.mkdir("newdir")

例如:

import os

# 创建目录 "test"
os.mkdir("test")

chdir() 方法,更改当前目录。语法:

os.chdir("newdir")

参数是要使其成为当前目录的目录的名称。

例如:

import os

# 将当前目录更换到 "/home/newdir"
os.chdir("/home/newdir")

getcwd() 方法,显示当前工作目录。语法:

os.getcwd()

例如:

import os

# 显示当前目录
os.getcwd()

rmdir() 方法,删除目录。语法:

os.rmdir('dirname')

参数为要删除的目录。

注意:在删除目录之前,应删除其中的所有内容。

例如:

import os

# 删除目录: "/tmp/test"  
os.rmdir( "/tmp/test"  )

File对象提供的函数

file 对象使用 open() 函数来创建。

  • file.close() 关闭文件。关闭后文件不能再进行读写操作。
  • file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
  • file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
  • file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。
  • file.next() 返回文件下一行。
  • file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
  • file.readline([size]) 读取整行,包括 "\n" 字符。
  • file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
  • file.seek(offset[, whence]) 设置文件当前位置
  • file.tell() 返回文件当前位置。
  • file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。
  • file.write(str) 将字符串写入文件,返回的是写入的字符长度。
  • file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

Tags:

最近发表
标签列表