网站建设资讯

NEWS

网站建设资讯

通编码读取文件内容

通编码读取文件内容


# 通编码读取文件内容
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://njwzjz.com/article/geceic.html