通编码读取文件内容
通编码读取文件内容
# 通编码读取文件内容
def read_lines_from_file(file_path, coding="utf-8"):
line_content = []
if os.path.isfile(file_path):
try:
with open(file_path, encoding=coding) as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
# print(e)
try:
with open(file_path, encoding="gbk") as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
print(e)
return []
elif os.path.isdir(file_path):
print("%s is a dir! can not read content directly!" % file_path)
return []
else:
print("%s file path does not exist!" % file_path)
return []
升级
import os.path
def read_lines_from_file(file_path,coding="utf-8"):
'''此函数用于读取某个文件的所有行'''
if os.path.isfile(file_path):
#判断file_path参数是文件的情况
try:
#用utf-8编码去读取文件的所有行
with open(file_path,encoding=coding) as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
#print(e)
#用utf-8编码读取出异常后,用gbk去读取文件的所有行
try:
with open(file_path,encoding="gbk") as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
print(e)
return []
elif os.path.isdir(file_path):
#判断file_path参数是目录的情况
print("%s is a dir! can not read content directly!" %file_path)
return []
else:
#判断file_path参数即不是目录,也不是文件的情况
print("%s file path does not exist!" %file_path)
return []
#print(read_lines_from_file("e:\\笔记1.txt"))
#print(read_lines_from_file("e:\\test1111"))
def count_line_num(path,match_letters):
"""统计一个目录的包含某字符串的行数
path参数可以是目录路径也可以是文件路径"""
line_nums = 0
if not os.path.exists(path):
#判断路径在不在,不在的话返回0
print("%s does not exists!" %path)
return line_nums
elif os.path.isfile(path):
#当路径是文件的时候,用封装的read_lines_from_file
#读取所有行,然后在做计数
if ".txt" not in path:
return line_nums
for line in read_lines_from_file(path):
if match_letters in line:
line_nums+=1
return line_nums
elif os.path.isdir(path):
#当路径是目录的时候,用封装的read_lines_from_file
#读取所有行,然后在做计数
for root,dirs,files in os.walk(path):
for file in files:
if ".txt" not in file:
continue
file_path = os.path.join(root,file)
for line in read_lines_from_file(file_path):
if match_letters in line:
line_nums+=1
return line_nums
def get_specific_lines(path,match_letters):
"""统计一个目录的包含某字符串的所有行
path参数可以是目录路径也可以是文件路径"""
specific_lines =[]
if not os.path.exists(path):
print("%s does not exists!" %path)
return line_nums
elif os.path.isfile(path):
if ".txt" not in path:
return line_nums
for line in read_lines_from_file(path):
if match_letters in line:
specific_lines.append(line)
return line_nums
elif os.path.isdir(path):
for root,dirs,files in os.walk(path):
for file in files:
if ".txt" not in file:
continue
file_path = os.path.join(root,file)
for line in read_lines_from_file(file_path):
if match_letters in line:
specific_lines.append(line)
return specific_lines
#print(count_line_num("e:\\a.txt","ab"))
print(get_specific_lines("e:\\pic","ab"))
with open(r"e:\result.txt",'w') as fp:
fp.writelines(get_specific_lines("e:\\pic","ab"))
再次修改:
import os.path
class Data:
def __init__(self,path):
self.path =path
@staticmethod
def read_lines_from_file(file_path, coding="utf-8"):
'''此函数用于读取某个文件的所有行'''
if os.path.isfile(file_path):
# 判断file_path参数是文件的情况
try:
# 用utf-8编码去读取文件的所有行
with open(file_path, encoding=coding) as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
# print(e)
# 用utf-8编码读取出异常后,用gbk去读取文件的所有行
try:
with open(file_path, encoding="gbk") as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
print(e)
return []
elif os.path.isdir(file_path):
# 判断file_path参数是目录的情况
print("%s is a dir! can not read content directly!" % file_path)
return []
else:
# 判断file_path参数即不是目录,也不是文件的情况
print("%s file path does not exist!" % file_path)
return []
@staticmethod
def read_lines_from_file(file_path, coding="utf-8"):
'''此函数用于读取某个文件的所有行'''
if os.path.isfile(file_path):
# 判断file_path参数是文件的情况
try:
# 用utf-8编码去读取文件的所有行
with open(file_path, encoding=coding) as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
# print(e)
# 用utf-8编码读取出异常后,用gbk去读取文件的所有行
try:
with open(file_path, encoding="gbk") as fp:
line_content = fp.readlines()
return line_content
except Exception as e:
print(e)
return []
elif os.path.isdir(file_path):
# 判断file_path参数是目录的情况
print("%s is a dir! can not read content directly!" % file_path)
return []
else:
# 判断file_path参数即不是目录,也不是文件的情况
print("%s file path does not exist!" % file_path)
return []
@staticmethod
def count_line_num(path, match_letters):
"""统计一个目录的包含某字符串的行数
path参数可以是目录路径也可以是文件路径"""
line_nums = 0
if not os.path.exists(path):
# 判断路径在不在,不在的话返回0
print("%s does not exists!" % path)
return line_nums
elif os.path.isfile(path):
# 当路径是文件的时候,用封装的read_lines_from_file
# 读取所有行,然后在做计数
if ".txt" not in path:
return line_nums
for line in Data.read_lines_from_file(path):
if match_letters in line:
line_nums += 1
return line_nums
elif os.path.isdir(path):
# 当路径是目录的时候,用封装的read_lines_from_file
# 读取所有行,然后在做计数
for root, dirs, files in os.walk(path):
for file in files:
if ".txt" not in file:
continue
file_path = os.path.join(root, file)
for line in read_lines_from_file(file_path):
if match_letters in line:
line_nums += 1
return line_nums
@staticmethod
def get_specific_lines(path, match_letters):
"""统计一个目录的包含某字符串的所有行
path参数可以是目录路径也可以是文件路径"""
specific_lines = []
if not os.path.exists(path):
print("%s does not exists!" % path)
return specific_lines
elif os.path.isfile(path):
if ".txt" not in path:
return []
for line in Data.read_lines_from_file(path):
if match_letters in line:
specific_lines.append(line)
return specific_lines
elif os.path.isdir(path):
for root, dirs, files in os.walk(path):
for file in files:
if ".txt" not in file:
continue
file_path = os.path.join(root, file)
for line in read_lines_from_file(file_path):
if match_letters in line:
specific_lines.append(line)
return specific_lines
print(Data.read_lines_from_file("e:\\a.txt"))
print(Data.count_line_num("e:\\a.txt","ab"))
print(Data.get_specific_lines("e:\\a.txt","ab"))
文章名称:通编码读取文件内容
文章来源:http://hbruida.cn/article/geceic.html