语法格式:
split(sep, num)
sep为分隔符,不写sep时,默认表示用 空格,\n,\t 分隔字符串
a,b,c = input("请输入3个数字(空格分隔):").split()
a = float(a)
b = float(b)
c = float(c)
三种输出格式:
以 求复数的平方根 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格式化输出
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
为了能够在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 "", line 1, in
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 种函数,它们都可以帮我们实现读取文件中数据的操作:
#以 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()
>>> 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 ====================
你站在桥上看风景,
看风景人在楼上看你。
明月装饰了你的窗子,
你装饰了别人的梦。
>>> 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() 方法返回文件的当前位置,即文件指针当前位置。
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() 函数用于移动文件读取指针到指定位置。
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -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 "", line 1, in
line=data.write(str) #将字符串添加到文件末尾处
io.UnsupportedOperation: not writable
注:
这里文件以只写模式打开,如果该文件存在内容,会直接被覆盖;如果文件不存在,会创建一个文件对象;而以只读模式打开时,如果文件不存在,会返回异常信息。
文件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() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n,若列表中字符串的末尾没有换行符,则相当于写入了一行数据。
代码过程来自菜鸟教程(实际运行过,没有问题):
>>> data= open("test.txt", "w")
>>> print("文件名为: ", data.name)
文件名为: test.txt
>>> seq = ["菜鸟教程 1\n", "菜鸟教程 2"]
>>> data.writelines(seq)
>>> data.close() # 关闭文件
实例(将僧推月下门改为僧敲月下门):
文件 写错的一首诗.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()
file_object.close()
注意,当操作文件结束后,必须调用 close() 函数手动将打开的文件进行关闭,这样可以避免程序发生不必要的错误。
当file对象被引用到操作另一个文件时,Python会自动关闭之前的file对象。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 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)