通编码读取文件内容
# 通编码读取文件内容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.pathdef 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_numsdef 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.pathclass 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_linesprint(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"))
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。