• 输出

表达式语句,print() 函数,文件对象的write()方法

print()可以添加end参数来指定打印完成后添加什么,默认为添加换行符\n,如果指定了end参数,则不会再添加换行符

另外注意end=‘’和end=‘ ’不一样,前者什么都没添加(用于将打印内容横向排列),后者添加了空格

  • 输入

input() 内置函数从标准输入读入一行文本,默认输入为字符串格式

如果要输入多个参数,可以使用空格隔开,最后得到的输入就是分隔符为空格的字符串

然后使用str.split(' '),以空格作为分隔符,将其分解成字符串组成的列表,然后按照输入顺序进行索引即可

(如果使用了多个分隔符,可以按照次数多分割几次)

  • 读写文件

open(filename,),filename包含了你要访问的文件名称的字符串值,mode为文件打开的模式,默认为只读(r)

返回一个文件对象,之后都是对这个文件对象进行操作

r

以只读方式打开文件。文件的指针将会放在文件的开头

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头

r+

打开一个文件用于读写。文件指针将会放在文件的开头

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

w+

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写

ab

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

一共有r,r+,w,w+,a,a+以及各自对应的二进制形式
a用于追加(append),有写(a)和读写(a+)两种形式
r和r+用于读和读写,均在起始位置
w和w+用于写和读写,均在起始位置
(其中r+不会创建或者覆盖,w+则会创建或者覆盖)
(对于一个文件,如果其文件已存在,此时使用w会使该文件在open的时候原有的内容全部被删除)
# 打开一个文件
f = open("/tmp/foo.txt", "w")
f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
# 关闭打开的文件
f.close()

$ cat /tmp/foo.txt 
Python 是一个非常好的语言。
是的,的确非常好!!
  • 文件对象方法
f.read(size),size 是一个可选的数字类型的参数,当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回
返回字符串或者字节对象
# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.read()
print(str)
# 关闭打开的文件
f.close()

# Python 是一个非常好的语言。
# 是的,的确非常好!!

f.readline() 会从文件中读取单独的一行(一次读取一行)。换行符为 '\n'。

f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行

# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.readline()
print(str)
# 关闭打开的文件
f.close()

# Python 是一个非常好的语言。

f.readlines() 将返回该文件中包含的所有行。

如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.readlines()
print(str)
# 关闭打开的文件
f.close()

# ['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

或者是直接迭代这个文件对象(文件对象是按照单个字节的顺序组合成的可迭代对象,并且添加了换行符)

# 打开一个文件
f = open("/tmp/foo.txt", "r")
for line in f:
    print(line, end='')   #为了避免打印一个字节就换行,在文件中存在着换行符,会自动换行,所以此处不需要额外添加
# 关闭打开的文件
f.close()

# Python 是一个非常好的语言。
# 是的,的确非常好!!

f.write(string) 将 string 写入到文件中,string为写入的字符串,注意要自行添加换行符

返回写入的字符数

# 打开一个文件
f = open("/tmp/foo.txt", "w")
num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
print(num)
# 关闭打开的文件
f.close()

# 29

如果要写入一些不是字符串的东西, 那么将需要先使用str()进行转换

 f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数

如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。

from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符

seek(x,1) : 表示从当前位置往后移动x个字符

seek(-x,2):表示从文件的结尾往前移动x个字符

f = open('/tmp/foo.txt', 'rb+')
 f.write(b'0123456789abcdef')
# 16
 f.seek(5)     # 移动到文件的第六个字节
# 5
 f.read(1)
# b'5'
 f.seek(-3, 2) # 移动到文件的倒数第三字节
# 13
 f.read(1)
# b'd'

在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。

当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。

f.close()
 f.read()
# Traceback (most recent call last):
# File "<stdin>", line 1, in ?
# ValueError: I/O operation on closed file

当处理一个文件对象时, 使用 with 关键字(进行上下文管理)是非常好的方式。在结束后, 它会帮你正确的关闭文件(不需要手动的再去关闭文件)(文件读写时都有可能产生 IOError,所以一般都要进行异常处理,即无论是否出错都要关闭文件)

with语句写起来也比 try - finally 语句块要简短:

with open('/tmp/foo.txt', 'r') as f:
     read_data = f.read()
 f.closed
# True
  •  os模块方法
os.chdir(path),path为要切换到的新路径
如果允许访问返回 True , 否则返回False
import os, sys
path = "/tmp"
# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)
# 当前工作目录为 /www
# 目录修改成功 /tmp
os.close(fd),fd为指定的文件描述符
该方法没有返回值
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
#  写入字符串
os.write(fd, "This is test")
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
# 关闭文件成功!!
os.getcwd()
返回当前进程的工作目录
import os, sys
# 切换到 "/var/www/html" 目录
os.chdir("/var/www/html" )
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwd())
# 打开 "/tmp"
fd = os.open( "/tmp", os.O_RDONLY )
# 使用 os.fchdir() 方法修改目录
os.fchdir(fd)
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwd())
# 关闭文件
os.close( fd )
# 当前工作目录 : /var/www/html
# 当前工作目录 : /tmp
os.listdir(path),path为需要列出的目录路径
返回指定路径下的文件和文件夹列表,可以用于遍历这个目录下的所有文件
import os, sys
# 打开文件
path = "/var/www/html/"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
    print (file)
# test.htm
# stamp
# faq.htm
os.mkdir(path[, mode]),path为要创建的目录,mode为权限数字模式
无返回值,可以用于直接在电脑上创建工作文件加,提高程序通用性
如果文件存在时进行创建会发生错误,有两种方法
一种是使用try进行异常处理,另一种就是首先检查是否存在该文件再去执行操作
# 检查文件是否存在
os.path.exists(test_file.txt)
#True
os.path.exists(no_exist_file.txt)
#False
# 检查文件夹是否存在
os.path.exists(test_dir)
#True
os.path.exists(no_exist_dir)
#False
os.makedirs()则可以用于递归创建多级目录
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily/hourly"
os.mkdir( path, 0755 )
print ("目录已创建")
# 目录已创建
os.open(file, flags[, mode]),file为要打开的文件,falgs为打开的方式,mode为权限模式
返回新打开文件的描述符,之后都是对这个文件描述符进行操作
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, str.encode("This is test"))
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
# 关闭文件成功!!
os.closerange(fd_low, fd_high),fd_low为最小文件描述符,反之为最大文件描述符
文件描述符也是按照顺序进行创建的,所以可以按照最高和最低来限定范围
没有返回值
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 关闭文件
os.closerange( fd, fd)
print ("关闭文件成功!!")
# 关闭文件成功!!
os.dup(fd),fd为文件描述符
返回复制的文件描述符
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 复制文件描述符
d_fd = os.dup( fd )
# 使用复制的文件描述符写入文件
os.write(d_fd, "This is test".encode())
# 关闭文件
os.closerange( fd, d_fd)
print ("关闭所有文件成功!!")
# 关闭所有文件成功!!
os.fstat(fd),fd为文件描述符
返回文件描述符fd的状态
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 获取元组
info = os.fstat(fd)
print ("文件信息 :", info)
# 获取文件 uid
print ("文件 UID :%d" % info.st_uid)
# 获取文件 gid
print ("文件 GID  :%d" % info.st_gid)
# 关闭文件
os.close( fd)
# 文件信息 : (33261, 3753776L, 103L, 1, 0, 0, 
#            102L, 1238783197, 1238786767, 1238786767)
# 文件 UID :0
# 文件 GID :0
os.mkfifo(path[, mode]),path为创建目录,mode为数字权限模式
无返回值
import os, sys
# 创建的目录
path = "/tmp/hourly"
os.mkfifo( path, 0644 )
print ("路径被创建")
# 路径被创建
os.pipe()
返回一对文件描述符(r, w) 分别为读和写
import os, sys

print ("The child will write text to a pipe and ")
print ("the parent will read the text written by child...")

# 文件描述符 r, w 用于读、写
r, w = os.pipe() 

processid = os.fork()
if processid:
    # 父进程
    # 关闭文件描述符 w
    os.close(w)
    r = os.fdopen(r)
    print ("Parent reading")
    str = r.read()
    print ("text =", str)
    sys.exit(0)
else:
    # 子进程
    os.close(r)
    w = os.fdopen(w, 'w')
    print ("Child writing")
    w.write("Text written by child...")
    w.close()
    print ("Child closing")
    sys.exit(0)
# The child will write text to a pipe and
# the parent will read the text written by child...
# Parent reading
# Child writing
# Child closing
# text = Text written by child...
os.read(fd,n),fd为文件描述符,n为读取的字节数
返回包含读取字节的字符串
import os, sys
# 打开文件
fd = os.open("f1.txt",os.O_RDWR)
# 读取文本
ret = os.read(fd,12)
print (ret)
# 关闭文件
os.close(fd)
print ("关闭文件成功!!")  #此处使用了print()使其显示方式更友好,实际上其是字符串
# This is test
# 关闭文件成功!!
os.remove(path),path为要移除的文件路径
没有返回值
# 列出目录
print ("目录为: %s" %os.listdir(os.getcwd()))
# 移除
os.remove("aa.txt")
# 移除后列出目录
print ("移除后 : %s" %os.listdir(os.getcwd()))
# 目录为:
# [ 'a1.txt','aa.txt','resume.doc' ]
# 移除后 : 
# [ 'a1.txt','resume.doc' ]
os.removedirs(path),path为要移除的目录路径
没有返回值
import os, sys
# 列出目录
print ("目录为: %s" %os.listdir(os.getcwd()))
# 移除
os.removedirs("/test")
# 列出移除后的目录
print ("移除后目录为:" %os.listdir(os.getcwd()))
# 目录为:
# [  'a1.txt','resume.doc','a3.py','test' ]
# 移除后目录为:
# [  'a1.txt','resume.doc','a3.py' ]
os.rename(src, dst),src为要修改的目录名,dst为修改后的目录名
没有返回值
import os, sys
# 列出目录
print ("目录为: %s"%os.listdir(os.getcwd()))
# 重命名
os.rename("test","test2")
print ("重命名成功。")
# 列出重命名后的目录
print ("目录为: %s" %os.listdir(os.getcwd()))
# 目录为:
# [  'a1.txt','resume.doc','a3.py','test' ]
# 重命名成功。
# [  'a1.txt','resume.doc','a3.py','test2' ]
os.renames(old, new),主要用于递归更改目录的名称
没有返回值
import os, sys
print ("当前目录为: %s" %os.getcwd())
# 列出目录
print ("目录为: %s"%os.listdir(os.getcwd()))
# 重命名 "aa1.txt"
os.renames("aa1.txt","newdir/aanew.txt")
print ("重命名成功。")
# 列出重命名的文件 "aa1.txt"
print ("目录为: %s" %os.listdir(os.getcwd()))
# 当前目录为: /tmp
# 目录为:
# [  'a1.txt','resume.doc','a3.py','aa1.txt','Administrator','newdir','amrood.admin' ]
# 重命名成功。
# 目录为:
# [  'a1.txt','resume.doc','a3.py','Administrator','newdir','amrood.admin' ]
os.rmdir(path),path为文件目录
无返回值
注意只能删除空目录
os.write(fd, str),fd为文件描述符,str为写入的字符串
返回写入的实际位数
# 打开文件
fd = os.open("f1.txt",os.O_RDWR|os.O_CREAT)
# 写入字符串
str = "This is runoob.com site"
ret = os.write(fd,bytes(str, 'UTF-8'))
# 输入返回值
print ("写入的位数为: ")
print (ret)
print ("写入成功")
# 关闭文件
os.close(fd)
print ("关闭文件成功!!")
# 写入的位数为: 
# 23
# 写入成功
# 关闭文件成功!!
os.pardir
返回当前目录的父目录,默认值为..