python文件处理-创新互联

方法一:

成都创新互联公司是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都网站建设、成都网站制作、电商网站制作开发、成都小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!
f = open(file='D:/工作日常/test.txt',mode='r',encoding='utf-8')
data = f.read()
f.close

方法二:

with open(file='D:/工作日常/test.txt',mode='r',encoding='utf-8') as f
data = f.read()

file='D:/工作日常/test.txt'  表示文件路径
mode='r'                           表示只读(可以修改为其他)
encoding='utf-8'                表示字符编码
f.read()                              表示读取所有内容,内容是已经转换完毕的字符串。
f.close()                             表示关闭文件

不清楚要处理的文件是什么编码处理办法:

pip install chardet  安装chardet  ##检测编码模块

import chardet 
f = open('log',mode='rb') 
data = f.read() 
f.close() 
result = chardet.detect(open('log',mode='rb').read()) 
print(result) 
输出: 
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'} 
print(chardet.detect(b'Hello, world!')) 
输出: {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

循环文件:

f = open("test.txt",'r',encoding="utf-8") 
    for line in f:
    
print(line) 
f.close()

写文件:

f = open(file='D:test.txt',mode='w',encoding='utf-8')
f.write('test,test')
f.close()


file='D:/test.txt'     表示文件路径
mode='w'              表示只写
encoding='utf-8'     将要写入的unicode字符串编码成utf-8格式
f.write(...)
表示写入内容,写入的内容是unicode字符串类型,内部会根据encoding转换为制定编码的 01101010101,
即:字节类型
f.close()


f = open(file='D:/test.txt',mode='wb')
f.write('test,test'.encode('utf-8'))
f.close()


file='D:/test.txt'      表示文件路径
mode='wb'            表示只以2进制模式写
f.write(...)              表示写入内容,写入的内容必须字节类型,即:是某种编码格式的二进制格式
f.close()

注意:

文件操作时,以“w”或者"wb"模式打开,则只能写,并且在打开的同时会先将内容清空。

在写入到硬盘上时,必须是某种编码的二进制,打开时需要注意:

wb,写入时需要直接传入以二进制格式,即字节类型

w和encoding,写入时需要传入unicode字符串,内部会根据encoding指定的编码将unicode字符串转换为该编码的二进制格式

追加:

把内容追加到文件尾部

f = open("test.txt",'a',encoding="gbk")

f.write("\ntest2 北京  167 49 13324523342")
f.close()

注意:

文件操作时,以“a”或者“ab”模式打开,则只能追加,即:在原来内容的尾部追加内容

写入硬盘上时,必须是某种编码的二进制格式,打开时需要注意:

  • ab,写入是需要直接传入某种编码的二进制格式,即:字节类型

  • a和encoding,写入时需要传入unicode字符串,内部会根据encoding指定的编码将unicode字符串转换为该编码的二进制格式

读写模式:

f = open("test.txt",'r+',encoding="gbk")
data = f.read() #可以读内容 
print(data)
f.write("\nblack girl  河北  167 50  13542342233") #可以写
f.close()
写入的文件追加到文件最后

写读模式:

f = open("test.txt",'w+',encoding="gbk")
data = f.read() 
print(data)

f.write("\nnewline 1哈哈")
f.write("\nnewline 2哈哈")
f.write("\nnewline 3哈哈")
f.write("\nnewline 4哈哈")

print("content",f.read())

f.close()
此时查看文件 内容 发现,里面只有4条newline..内容,之前的旧内容全没了,事实代表,w+会先把文件清空,再写新内容,相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容。
seek() 方法用于移动文件读取指针到指定位置
fileObject.seek(offset[, whence])

参数

  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

seek如果直接写入文件,偏移量有数据的话就会替换掉之前的数据,这是因为硬盘的存储原理导致的,当文件存储硬盘中,硬盘就会划分一块空间,存储数据,当你再次读取文件时,seek到某个位置,每做出一次修改,就会把原来的数据覆盖掉,如果想直接插入,是不可能的,因为后边的数据在硬盘上不会整体向后偏移。

如果想要修改数据,需要把硬盘中的数据全部读取到内存中,然后在内存中修改数据(增删改查),修改过后,再把内容全部写回硬盘,把原来的数据全部覆盖掉。vim、word各种文本编辑器就是这样的原理。

占硬盘方式的文件修改代码示例

import os

f_name = "test.txt"
f_new_name = "%s.new" % f_name

old_str = "乔亦菲"
new_str = "[乔亦菲 Yifei Qiao]"

f = open(f_name,'r',encoding="utf-8")
f_new = open(f_new_name,'w',encoding="utf-8")

for line in f:

    if old_str in line:
        new_line = line.replace(old_str,new_str)
    else:
        new_line = line

    f_new.write(new_line)

f.close()
f_new.close()

os.rename(f_new_name,f_name) #把新文件名字改成原文件 的名字,就把之前的覆盖掉了,windows使用os.replace #

练习题:

练习题1 —— 全局替换程序:

写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换

`python your_script.py old_str new_str filename`

替换完毕后打印替换了多少处内容

import sys, os, re

if len(sys.argv) <= 4:
    print('usage:./practice.py  old_text  new_text  filename')

    old_text, new_text = sys.argv[1], sys.argv[2]
    filename = sys.argv[3]
    with open(file=filename, mode='r', encoding='utf8') as f:
        data = f.read()
    # print(data)
    count = re.findall(old_text, data)
    print('修改%s处内容' % len(count))
    data = data.replace(old_text, new_text)
    print(data)
    with open(file='%s_new' % filename, mode='w', encoding='utf8') as f:
        f.write(data)
    os.rename('%s_new' % filename, filename)

模式

描述

t

文本模式 (默认)。

x

写模式,新建一个文件,如果该文件已存在则会报错。

b

二进制模式。

+

打开一个文件进行更新(可读可写)。

U

通用换行模式(不推荐)。

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

r+

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

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

w

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

wb

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

w+

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

wb+

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

a

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

ab

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

a+

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

ab+

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


另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:python文件处理-创新互联
分享链接:http://scyanting.com/article/igods.html