pythonwithopena
⑴ 用python 怎么和硬件进行链接,通信,交互
本文介绍了用python与文件进行交互的方法,分享给大家,具体如下:
一.文件处理
1.介绍
计算机系统:计算机硬件,操作系统,应用程序
应用程序无法直接操作硬件,通过操作系统来操作文件,进而读/写硬件中的文件。
python打开文件过程:
#打开
f=open('a.txt','r')
#通过句柄对文件进行操作
read_f=f.read()
#关闭文件
f.close()
with open('a.txt','r') as f: #不需要关闭
f.close() #回收操作系统打开的文件
del f #回收应用程序级的变量
2.打开文件的模式
a.打开文本文件
#r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
f=open('a.txt',encoding='utf-8')
data1=f.read()
print(f.readline(),end='')
print(f.readlines())
#w,只写模式【不可读;不存在则创建;存在则清空内容】
f=open('a.txt','w',encoding='utf-8')
f.write('werf')
#a,只追加写模式【不可读;不存在则创建;存在则只追加内容】
f=open('a.txt','a',encoding='utf-8')
f.write('werf\n')
b.对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式
with open('1.jpg','rb') as f_read:
data=f_read.read()
print(data)
with open('a.txt','rb') as f_read:
data=f_read.read().decode('utf-8') #解码
print(data)
with open('a.txt','wb')as f_write:
f_write.write('adsf'.encode('utf-8'))
'''
练习,利用b模式,编写一个cp工具,要求如下:
1. 既可以拷贝文本又可以拷贝视频,图片等文件
2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file
'''
import sys
if len(sys.argv)!=3:
print('usage:cp source_file target_file')
sys.exit()
source_file,target_file=sys.argv[1],sys.argv[2]
print()
with open(source_file,'rb')as f_read,open(target_file,'wb')as f_write:
for line in f_read:
f_write.write(line)
3.文件内光标的移动
#以文本模式读文件,n代表的是字符的个数
with open('a.txt','r')as f_read:
data=f_read.read(6)
print(data)
#以b模式读文件,n代表的是字节的个数
with open('a.txt','rb')as f_read:
data=f_read.read(6)
print(data)
# tell:告诉当前光标的位置
with open('a.txt','r',encoding='utf-8')as f_read:
data=f_read.read(4)
data1=f_read.tell()
print(data,data1)
# seek:移动光标(0:文件开头默认;1:文件当前光标;2:文件末尾)
with open('a.txt', 'r', encoding='utf-8')as f_read:
data = f_read.seek(3)
data1 = f_read.read()
print(data, data1)
# 实现tail功能
import time
with open('access.log', 'rb')as f_read:
f_read.seek(0,2)
while True:
line = f_read.readline()
if line:
print(line.decode('utf-8'),end='')
else:
time.sleep(1)
4.文件的修改
import os
with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('alex','SB')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
⑵ python对文件的独操作有哪几种请详细说明每种方法
1.打开文件:
f=open(r'E:\PythonProjects\test7\a.txt',mode='rt',encoding='utf-8')
以上三个单引号内分别表示:要打开的文件的路径,mode为文件打开方式具体介绍在下文,encoding为文件的字符编码,一般默认为utf-8
2.读写文件:
data=f.read() # 读文件
f.write() # 写文件
3.关闭文件:
f.close()
4.为了简便,一般采用上下文的方法进行文件操作,可不用关闭文件
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
print(data)
with open('a.txt',mode='wt',encoding='utf-8') as f:
f.write('hello world')
5.控制文件读写的操作:
r:(默认模式):只读:以该模式打开文件时,若文件不存在则报错,若文件存在,则文件指针在文件开头,即从文件开头开始读文件
w:只写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则清空文件内容,文件指针移到开头
a:追加写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则将文件指针移到文件末尾,在文件末尾写入新的内容
6.控制文件读写内容的模式:(t 和 b都不能单独使用,必须与r,w,a结合使用)
t:(默认):无论读写都是以字符为单位,只能识别文本文件,必须要制定encoding
b:无论读写都是以字节为单位,可以识别所有文件,一定不能指定encoding
7.文件的拷贝
with open ('a.txt',mode='rb') as af,\
open('b.txt',mode='wb') as bf:
data=af.read
f.write(data)
执行程序后,打开文件,即可发现文件已成功拷贝,这里使用 b 而不是用 t 模式,是因为文件有多种格式
8.文件的修改:
文件的修改是在硬盘上实现文件的覆盖,相当于一个新的文件以旧的文件名来命名的; 文件的修改有俩种方式,分别适用于不同的情景
方式一(适用于容量小的文件):这种方式的原理是:创建一个新的文件,将旧文件的内容拷贝到新的文件中;这样内存里就存在俩个文件,故不适用于容量大的文件,具体代码见下方 View
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
data_new=data.replace('yang', 'yv')
with open('b.txt',mode='wt',encoding='utf-8')as p:
p.write(data_new)
方式二(适用于容量大的文件):此方式的原理为:读取旧文件的一行内容,修改后写到临时文件中,循环往复直到写完,然后将源文件删除,将临时文件命名为源文件名.这种方式在内存中只存在2行文件,节省内存,可用于大文件
import os
with open('b.txt',mode='rt',encoding='utf-8') as f,\
open('.b.txt.swap',mode='wt',encoding='utf-8') as p:
for line in f:
p.write(line.replace('yv','yang'))
# 调用replace方法,将源文件中的'yv',换成'yang'
os.remove('b.txt')
os.rename('.b.txt.swap','b.txt')
9. 文件的阶段:truncate(n)
将文件中n个字节后内容全删了,当 n 不存在时,即删除文件全部内容
10.文件内指针的移动
f.seek(): 指针的移动是以字节为单位的
seek 有三种模式:
0:(默认模式) 指针在文件开头,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用
1:指针在当前位置
2:指针在文件末尾
以下为具体事例:
# 0
with open('a.txt',mode='rt',encoding='utf-8')as f:
f.seek(3,0)
print(f.tell()) # 指针当前位置
print(f.read()) # 从指针后读出所有内容
# 1 参照指针当前位置
with open('a.txt',mode='rb')as f:
f.read(2)
f.seek(4,1)
print(f.tell())
print(f.read().decode('utf-8'))
# 2 参照文件末尾
with open('a.txt',mode='rb')as f:
f.seek(-5,2)
print(f.tell())
print(f.read().decode('utf-8'))
当 seek处于 2 模式时,可以将文件中新加入的内容打印出来,具体代码如下:
# 另一个文件进行写操作,写的代码如下:
with open('a.txt',mode='at',encoding='utf-8')as f:
f.write('hello world\n')
# 每在文件中写入新的内容,都打印出来,以下代码执行打印操作:
import time
with open('a.txt',mode='rb')as f:
f.seek(0,2)
while True:
line=f.readline() # readline 可以读取没有内容的部分
# print(line.decode('utf-8'))
if len(line)==0:
time.sleep(0.1)
else:
print(line.decode('utf-8'))
⑶ Python用open打开文件,输入完整路径可以打开,直接文件名不能打开,为什么
open函数中的文件名默认是寻找当前目录下的这个文件
如果当前目录下没有就会报错。建议在日常使用中写上绝对路径(完整路径)
#-*-encoding:utf-8-*-
withopen('a.txt')asf:
res=f.readline()
print(res)
当前目录下没有a.txt 下面是报错
with open() as f就相当于 f = open()
第一种方式会在程序结束后自动回收内存。可以不用写f.close()。其余用法一样
⑷ python中使用open需要close关闭,有不用关闭的语法么
有的,
with open('d:\\a.txt','r') as f:
....content = f.read()
这样读完会自动关闭
⑸ python里的with open(file name) as file obj是什么意思
就是打开一个文件并声明变量file obj 接收打开后的文件对象,同时with语句块会在程序结束时候自动关闭打开的文件句柄,不会造成内存存泄露之后的问题
大概等效于
try:
file_obj = open(file_name)
#with里面你写的代码
except Exception:
raise Exception
finally:
if file_obj :
file_obj.close()
⑹ python可以同时对文件进行读写操作吗
对文件的操作,步骤为:打开一个文件-->读取/写入内容-->保存文件
文件读写的3中模式
# 1、w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写
# w+ 是读写内容,只要沾上w,肯定会清空原来的文件
# 2、r 读模式,只能读,不能写,而且文件必须存在
# r+ 是读写模式,只要沾上r,文件必须存在
# 3、a 追加模式,也能写,在文件的末尾添加内容
# 4、rb+、wb+、ab+,这种是二进制模式打开或者读取,一些音乐文件
test1.txt
1 如果无情的风摘走了那片树叶
2 如同摘走了我的心
3 在每一个想你的夜晚
4 请允许我将你抱紧
5 我不像一只大雁可以秋去春来
6 衔回丢失的缘分
7 所以从来不敢回忆离别
8 越是清晰 越是伤心
9 你说所有的城市没有不同
10 我宁愿相信你心中有片草原
1、循环读取文件中的每一行内容:
demo1.py1 file = open('test1.txt','r+')# 打开test1.txt 文件
2 for line in file: # 遍历file文件
3 print('line里面存放的是:',line) # 循环打印文件中每一行内容
4 print(type(line)) # <class 'str'> 类型是字符串
5 file.close()# 关闭文件
用with的方式打开文件,不用担心使用完文件后忘记关闭,它会自动将文件关闭1 with open('test1.txt','r+') as file:
2 for line in file:
3 print('line里面存放的是:',line) # 循环打印文件中每一行内容
4 print(type(line)) # <class 'str'> 类型是字符串
3、向文件中写入内容
1 with open('users','a+') as fw: # 打开文件
2 fw.write('写入文件内容')
4、用函数的方式读取文件
1 def read_file(filename):
2 '''
3 用来读取文件内容
4 :param filename: 文件名
5 '''
6 with open(filename,'a+') as fr:
7 fr.seek(0) # 移动文件指针
8 content = fr.read() # content 类型是字符串
9 print('content:',content)
10 read_file('users') # 调用函数
5、用函数的方式写文件
1 def write_file(filename,content):
2 '''
3 用来读取文件内容的
4 :param filename: 文件名
5 '''
6 with open(filename,'a+') as fw:
7 fw.seek(0) # 移动文件指针
8 fw.truncate() # 清空文件内容
9 fw.write(str(content))
10 write_file('a','hello world') # 调用函数
⑺ 你好,想请问您,我有两个文本文件,怎么用python提取两个文件中有相同文字的那行
两个文件分别一行行读取,然后逐个匹配行内的字符
⑻ 怎么用python写病毒
很简单,就三行
import os
while True:
os.system('start cmd')
运行的几秒钟后,你电脑满是cmd!
⑼ python3 with open()用法
w 是写入模式
r是读取模式
wb 是二进制写入
with open('a.jpg'.'wb')as f: 后面跟一段f.write()
⑽ python 循环出错
空列表就是没读到东西啊
我猜你是不是前面第一个循环写文件操作没有真正写入到磁盘上;
这和ln原来是啥没关系,
>>>f=open("a","w")
>>>f.write("1111")
>>>withopen("a")asfile:
printfile
printfile.readlines()
<openfile'a',mode'r'at0x0000000002B3D4B0>
[]
>>>f.flush()
>>>withopen("a")asfile:
printfile
printfile.readlines()
<openfile'a',mode'r'at0x0000000002B3D390>
['1111']
>>>