【Python基础入门篇】基本函数——输入输出+文件读写

输入和输出

input

input().split()

语法格式:
split(sep, num)
sep为分隔符,不写sep时,默认表示用 空格,\n,\t 分隔字符串

a,b,c = input("请输入3个数字(空格分隔):").split()
a = float(a)
b = float(b)
c = float(c)

print

格式化输出

三种输出格式:
求复数的平方根 python程序为例说明

import cmath
try:    
    num=float(input("请输入一个数字"))
except:    
    print("输入的数字格式不正确,退出")
else:    
    if num>=0:        
        num_sqrt=num**0.5        
        print(f"{num}的平方根是{num_sqrt:.3f}")    
    else:        
        num_sqrt=cmath.sqrt(num)        
        print(f"{num}的平方根是{num_sqrt.real:.3f}+{num_sqrt.imag:.3f}j")
   #   print(f" ")
  print(' %0.3f 的平方根为 %0.3f' % (int(num), num_sqrt))
   #  %格式化输出
print('{0:0.3f}+ {1:0.3f}j 8的平方根为 {2:0.3f}+{3:0.3f}j'.format(a, b, num_sqrt.real, num_sqrt.imag))
   #  format格式化输出

文件和文件系统

打开文件 open()

Python open()函数用于打开文件,并返回一个文件对象,然后通过文件对象对文件进行各种处理。但是,采用不同的模式打开文件,我们可以进行的操作以及程序运行结果也是不同的。

open()函数完整的语法格式为:

open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)

具体可参考这篇文章,写得蛮清楚:
Python open()函数的模式详解:
版权声明:本文为CSDN博主「南方觅雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42904081/article/details/92612833

读取文件 read()

为了能够在Python中打开文件进行读写,open函数主要运用到了两个参数——文件名和mode。文件名是添加该文件对象的变量,mode是告诉编译器和开发者文件通过怎样的方式进行使用。因此在Python中打开和读取文件的代码如下:

file_object = open('filename', 'mode')
file_object.read(size)

但初次使用会遇到这样的问题:

>>> open(r'F:\program\python\my file.txt')
<_io.TextIOWrapper name='F:\\program\\python\\my file.txt' mode='r' encoding='cp936'>
>>> open(r'my file.txt')
<_io.TextIOWrapper name='my file.txt' mode='r' encoding='cp936'>
>>> open('F:\program\python\my file.txt','r')
<_io.TextIOWrapper name='F:\\program\\python\\my file.txt' mode='r' encoding='cp936'>
>>> open(r'my file.txt',encoding='utf-8')
<_io.TextIOWrapper name='my file.txt' mode='r' encoding='utf-8'>
>>> data=open(r'my file.txt')
>>> data.read()
'This is my first text.\nThis is next text.\nThis is last line\nThis is appended file.'

只有最后两行代码才输出了想要的文件内容,其他命令运行后显示的信息都是:
<_io.TextIOWrapper name=‘F:\program\python\my file.txt’ mode=‘r’ encoding=‘cp936’>
查询到的问题答案是:

因为xx是实际的文件(一个TextIOWrapper对象),而不是它的内容。您可以使用它的read方法(即xx.read())或其他替代方法(取决于您的应用程序,例如readlines)从该对象获取内容。您可以在官方的Python文档中找到更多方法。

另一个问题是:
编码格式报错的问题

>>> data=open(r'adx.txt')
>>> data.read()
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    data.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 8: illegal multibyte sequence

解决方法是:
encoding=“utf-8”
作用是:声明python代码的文本格式是utf-8编码,也即告诉python解释器要按照utf-8编码的方式来读取程序。

>>> data=open(r'adx.txt',encoding="utf-8")
>>> data.read()
'今天是个好日子'

Python 提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:

read() 函数:逐个字节或者字符读取文件中的内容:

 #以 utf-8 的编码格式打开指定文件
 #指定文件'my file.txt'的内容是字符串1234567890
data= open("my file.txt",'r',encoding = "utf-8")
#输出读取到的数据
result1=data.read(5)
result2=data.read(5)
result3=data.read(3)
print('result1为%s'%result1)
print('result2为%s'%result2)
print('result3为%s'%result3)
#关闭文件
data.close()

执行结果如下:

>>> data= open("my file.txt",'r',encoding = "utf-8")
>>> result1=data.read(5)
>>> result2=data.read(5)
>>> result3=data.read(3)
>>> print('result1为%s'%result1)
result1为12345
>>> print('result2为%s'%result2)
result2为67890
>>> print('result3为%s'%result3)
result3为
>>> data.close()

readline() 函数:逐行读取文件中的内容:

>>> data= open("my file.txt",'r',encoding = "utf-8")
>>> print('文件名为:',data.name)
文件名为: my file.txt
>>> line1=data.readline()
>>> line2=data.readline()
>>> line3=data.readline()
>>> line4=data.readline()
>>> line5=data.readline()
>>> line1
'你站在桥上看风景,\n'
>>> line2
'看风景人在楼上看你。\n'
>>> print('读取第三行:%s'%(line3))
读取第三行:明月装饰了你的窗子,
>>> print('读取第四行:%s'%(line4))
读取第四行:你装饰了别人的梦。
>>> data.close()

循环小脚本实现逐行输出:

# 打开含中文的文本
file=open("my file.txt",'r',encoding='utf-8')
 
# 按行读取
while True:
    str=file.readline()
    print(str)
    # 读取完,循环结束
    if len(str)==0:
        break
 
file.close()

运行结果:

===================== RESTART: F:\program\python\python1.py ====================
你站在桥上看风景,

看风景人在楼上看你。

明月装饰了你的窗子,

你装饰了别人的梦。

readlines() 函数:一次性读取文件中多行内容:

>>> data= open("my file.txt",'r',encoding = "utf-8")
>>> data.readlines()
['你站在桥上看风景,\n', '看风景人在楼上看你。\n', '明月装饰了你的窗子,\n', '你装饰了别人的梦。']

读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。

#脚本输出
data= open("my file.txt",'r',encoding = "utf-8")    #打开文件

for line in data.readlines():                          #依次读取每行  
    line = line.strip()                             #去掉每行头尾空白  
    print ("读取的数据为: %s" % (line))
 
# 关闭文件
data.close()

运行结果:

===================== RESTART: F:\program\python\python1.py ====================
读取的数据为: 你站在桥上看风景,
读取的数据为: 看风景人在楼上看你。
读取的数据为: 明月装饰了你的窗子,
读取的数据为: 你装饰了别人的梦。

tell()函数:返回文件当前位置

tell() 方法返回文件的当前位置,即文件指针当前位置。

file_object.tell()

my file.txt文件内容如下:

1234567890
qwertyuiop
asdfghjkl
zxcvbnm
# 打开文件
data= open("my file.txt",'r',encoding = "utf-8")
print('文件名为:',data.name)

line = data.readline()
print ("读取的数据为: %s" % (line))

# 获取当前文件位置
pos = data.tell()
print ("当前位置: %d" % (pos))

# 关闭文件
data.close()

运行结果:

===================== RESTART: F:\program\python\python1.py ====================
文件名为: my file.txt
读取的数据为: 1234567890

当前位置: 12

seek()函数:设置文件当前位置

seek() 函数用于移动文件读取指针到指定位置。
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。

file_0bject.seek(offset[, whence])

offset – 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0,表示要从哪个位置开始偏移;
0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

>>> data= open("my file.txt",'r',encoding = "utf-8")  #打开文件
>>> print('文件名为:',data.name)    #输出文件名称
文件名为: my file.txt
>>> line=data.readline()
>>> print("读取的数据为: %s" % (line))
读取的数据为: 1234567890

>>> data.seek(0,0)   #重新设置文件读取指针到开头
0
>>> line=data.readline()
>>> print("读取的数据为: %s" % (line))
读取的数据为: 1234567890

>>> data.close()

当程序使用文件对象读写数据时,文件指针会自动向后移动:读写了多少个数据,文件指针就自动向后移动多少个位置。

写入文件

Python文件对象提供的写入文件的方法主要有两个:

file_object.write([str])               #file_object为文件对象,参数str为需要写入到文件中的字符串
file_object.writelines([str]):输出多个字符串或多个字节串。

在写入文件时一定要注意:打开文件时模式要设置成读写模式,否则会报错:

>>> data= open("my file.txt",'r',encoding = "utf-8")  #打开文件
>>> print('文件名为:',data.name)    #输出文件名称
文件名为: my file.txt
>>> str="大键盘按键位置"
>>> data.seek(0,2)    #设置位置为文件末尾处
42
>>> line=data.write(str)    #将字符串添加到文件末尾处
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    line=data.write(str)    #将字符串添加到文件末尾处
io.UnsupportedOperation: not writable

注:
这里文件以只写模式打开,如果该文件存在内容,会直接被覆盖;如果文件不存在,会创建一个文件对象;而以只读模式打开时,如果文件不存在,会返回异常信息。

write()函数:写入字符串

文件my file.txt 原内容:

1234567890
qwertyuiop
asdfghjkl
zxcvbnm

data= open("my file.txt",'r+',encoding = "utf-8")  #打开文件
>>> print('文件名为:',data.name)    #输出文件名称
文件名为: my file.txt
>>> str="大键盘按键位置"
>>> data.seek(0,2)    #设置位置为文件末尾处
42
>>> line=data.write(str)    #将字符串添加到文件末尾处
>>> data.seek(0,0)
0
>>> print(data.readlines())
['1234567890\n', 'qwertyuiop\n', 'asdfghjkl\n', 'zxcvbnm大键盘按键位置']
>>> data.close()

文件my file.txt 写入后内容:

1234567890
qwertyuiop
asdfghjkl
zxcvbnm大键盘按键位置

writelines()函数:

写入多行

writelines() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n,若列表中字符串的末尾没有换行符,则相当于写入了一行数据。

代码过程来自菜鸟教程(实际运行过,没有问题):

>>> data= open("test.txt", "w")
>>> print("文件名为: ", data.name)
文件名为:  test.txt
>>> seq = ["菜鸟教程 1\n", "菜鸟教程 2"]
>>> data.writelines(seq)
>>> data.close()   # 关闭文件
修改文件内容
  1. 先通过readlines读取整个文件所有行,保存在一个列表(list)变量中;
  2. 修改列表中的元素数据;
  3. 通过writelines()将列表重新写入即可。

实例(将僧推月下门改为僧敲月下门):
文件 写错的一首诗.txt 原内容:

   题李凝幽居

闲居少邻并,草径入荒园。
鸟宿池边树,僧推月下门。
过桥分野色,移石动云根。
暂去还来此,幽期不负言。

>>> data= open("写错的一首诗.txt",'r+',encoding = "utf-8")  #打开文件
>>> lines=data.readlines()
>>> data.close()  #关闭文件
>>> lines[2]="鸟宿池边树,僧敲月下门。\n"
>>> data= open("写错的一首诗.txt",'w',encoding = "utf-8")  #打开文件
>>> data.writelines(lines)
>>> data.close()

附加到文件

  1. 以读模式打开文件1,将文件1的内容赋值给变量content,关闭文件1 (read)
  2. 以追加模式(‘a’)打开文件2,将变量content的内容添加到文件2内容的结尾处 (write)
  3. 关闭文件2

关闭文件close()

file_object.close()

注意,当操作文件结束后,必须调用 close() 函数手动将打开的文件进行关闭,这样可以避免程序发生不必要的错误。
当file对象被引用到操作另一个文件时,Python会自动关闭之前的file对象。

刷新文件flush()

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 函数。(用处不是很大的样子?)

# 刷新缓冲区
file_object.flush()
# 关闭文件
file_object.close()

重命名文件

Python的os模块提供了rename方法,可以重命名文件

import os
os.rename(src, dst)
src -- 要修改的目录名(字符串)
dst -- 修改后的目录名(字符串)

删除文件

os.remove() 方法用于删除指定路径的文件

import os
os.remove(path)

删除文件夹

os.rmdir() 方法用于删除指定路径的目录,仅当这文件夹是空的才可以

import os
os.rmdir(path)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值