首页 > 编程语言 >使用Python读取txt中的指定内容

使用Python读取txt中的指定内容

时间:2023-07-24 11:56:37浏览次数:38  
标签:读取 Python Pc strip Path txt append row

一、序

在一些情况下,导出txt的配置信息,但是又有特定的规律。在这种情况下读取配置

二、问题分析

我们首先肯定是通过关键字定位文本位置,但txt文件我们会面临两种情况:
1.关键字与文本在同一行

2.关键字与文本不在同一行

3.判断条件
例如MAC地址只有有IP的才读取,没有IP的就不读取

三、解决思路

1.关键字与文本在同一行情况
 
     def sameLine(txt_Path, needWord):
        with open(txt_Path, "r") as file:
            words = needWord
            returnWord = []
            for line in file.readlines():
                if line.strip().startswith(words):
                    returnWord.append(line.strip().replace(words, ""))
        if len(returnWord) == 0:
            returnWord.append("无")
        return returnWord
    
2.关键字与文本不在同一行情况
 
      # 得到指定关键字行数
        def readTxtResult(txt_Path, needWord):
            with open(txt_Path, "r") as file:
                row = []
                words = needWord
                for i, line in enumerate(file.readlines(), start=1):
                    if words in line.strip():
                        b: int = i
                        row.append(b)
                    else:
                        var = ()
                return row
        # 得到指定一行的文本
          def getRowWord(txt_Path, row):
              with open(txt_Path, "r") as file:
                  lines = file.readlines()
                  word = lines[row].strip()
                  return word
  
  1. 如果是有判断条件,先去需要的地方获取判断条件,自定义判断条件
3.总代码
 
    import os.path
    import re


    def extract_chinese(text):
        if '0' in text:
            text = text.strip('0')
        pattern = re.compile(r'[\u4e00-\u9fa5]+')
        result = pattern.findall(text)
        return ''.join(result)


    def listToStr(strList):
        strs = ""
        if len(strList) > 0:
            for i in strList:
                strs = strs + i
                if i != strList[-1]:
                    strs = strs + "\\"
        return strs


    def returnNo(txt_Path):
        # 获取部门
        parent_dir = os.path.dirname(txt_Path)
        dep = os.path.basename(parent_dir)
        if '0' in dep:
            dep = dep.strip('0')
        # 获取编号
        name = os.path.basename(txt_Path)
        name = name.replace('.txt', '')

        userNo: str = re.sub('[\u4e00-\u9fa5]', '', name)
        name = extract_chinese(name)

        return dep, userNo, name


    # 得到指定关键字行数
    def readTxtResult(txt_Path, needWord):
        with open(txt_Path, "r") as file:
            row = []
            words = needWord
            for i, line in enumerate(file.readlines(), start=1):
                if words in line.strip():
                    b: int = i
                    row.append(b)
                else:
                    var = ()
            return row


    def sameLine(txt_Path, needWord):
        with open(txt_Path, "r") as file:
            words = needWord
            returnWord = []
            for line in file.readlines():
                if line.strip().startswith(words):
                    returnWord.append(line.strip().replace(words, ""))
        if len(returnWord) == 0:
            returnWord.append("无")
        return returnWord


    # 得到指定一行的文本
    def getRowWord(txt_Path, row):
        with open(txt_Path, "r") as file:
            lines = file.readlines()
            word = lines[row].strip()
            return word


    def if_SSD(word):
        if "SSD" in word:
            return "(SSD)"
        else:
            return "(SATA)"


    def toGBorDB(lists):
        for i in range(0, len(lists)):
            num_str = lists[i].strip("字节")
            lists[i] = num_str.strip("\t")
            numtoTB = lists[i]
            conunt_str = lists[i].count(",")
            if conunt_str >= 4:
                lists[i] = ''.join(numtoTB.split())[:-16].upper() + 'TB'

            elif conunt_str == 3:
                lists[i] = ''.join(numtoTB.split())[:-12].upper() + 'GB'

        return lists


    def readAll(txt_Path):
        try:
            readList = [returnNo(txt_Path)[0], returnNo(txt_Path)[1]]
            PcType = sameLine(txt_Path, "电脑类型:")[0]
            readList.append(PcType.strip(" "))

            row_OS = readTxtResult(txt_Path, "操作系统")
            Pc_OS = getRowWord(txt_Path, row_OS[0])
            readList.append(Pc_OS)

            row_MAC = readTxtResult(txt_Path, "MAC地址")
            Pc_MAC_list = []
            Pc_IP_list = []
            if len(row_MAC) > 0:
                for i in row_MAC:
                    if 'IP地址' in getRowWord(txt_Path, i):
                        Pc_MAC = getRowWord(txt_Path, i - 1).strip('MAC地址')
                        Pc_MAC_list.append(str(Pc_MAC).strip("\t"))
                        Pc_IP = getRowWord(txt_Path, i).strip("IP地址")
                        Pc_IP_list.append(Pc_IP.strip('\t'))
            # 判断是否上网
            if len(Pc_IP_list) > 0:
                PC_Net = "是"
            else:
                PC_Net = "否"
            readList.append(listToStr(Pc_IP_list))
            readList.append(listToStr(Pc_MAC_list))

            Pc_CPU = sameLine(txt_Path, "规格")
            row_RAM = readTxtResult(txt_Path, "RAM")
            Pc_RAM = getRowWord(txt_Path, row_RAM[0]).split('GB', 1)[0] + "GB"

            Pc_SSD = sameLine(txt_Path, "真实大小")
            Pc_SSD = toGBorDB(Pc_SSD)
            SSD_Num = len(Pc_SSD)
            row_SSD = readTxtResult(txt_Path, "存储器")[0]
            Pc_SSDType = []
            for i in range(0, SSD_Num):
                Pc_SSDType.append(if_SSD(getRowWord(txt_Path, row_SSD)))

            Pc_allSSD = f"{Pc_SSD[0]}" + f"{Pc_SSDType[0]}"
            if SSD_Num > 1:
                for i in range(1, SSD_Num):
                    Pc_allSSD = Pc_allSSD + f"+{Pc_SSD[i]}" + f"{Pc_SSDType[i]}"

            Pc_allSSD = Pc_CPU[0].strip("\t") + "\n" + Pc_RAM + "\n" + Pc_allSSD
            readList.append(Pc_allSSD)
            readList.append(PC_Net)
            readList.append(returnNo(txt_Path)[2])
            return readList
        except Exception as e:
            print(e)


    if __name__ == '__main__':
        # r不用管\ ,f可以使用变量
        path = r"测试.txt"
  

标签:读取,Python,Pc,strip,Path,txt,append,row
From: https://www.cnblogs.com/wengming/p/17576813.html

相关文章

  • 【Python】输出函数:pint
    输出函数:printprint() 方法用于打印输出,最常见的一个函数。print在Python3.x是一个函数,但在Python2.x版本不是一个函数,只是一个关键字。语法:print(*objects,sep='',end='\n',file=sys.stdout,flush=False)参数objects--复数,表示可以一次输出多个对象。输出......
  • Python list里面定义自定义类型
    PythonList中定义自定义类型在Python中,List(列表)是一种非常常见且强大的数据结构。它允许我们以有序的方式存储和访问多个元素。在List中,我们可以存储各种类型的数据,包括整数、浮点数、字符串等。但是,Python的灵活性还允许我们在List中存储自定义的数据类型,从而提供更高的灵活性和......
  • Python【17】 torch.cat()
    竖着或者横着拼接矩阵参考:https://www.cnblogs.com/JeasonIsCoding/p/10162356.html参考:https://blog.csdn.net/qian2213762498/article/details/88795848......
  • python的lru_cache
    functools模块中的lru_cache是一个装饰器,用于缓存函数的结果,以避免重复计算。LRU(LeastRecentlyUsed)表示最近最少使用,这意味着当缓存空间满时,会优先删除最久未被使用的缓存项。要使用lru_cache装饰器,需要将其应用于你想要缓存的函数。以下是一个简单的例子:importfunctools@f......
  • python打包方法
    在Python中,要编写setup.py文件,用于构建和打包你的Python项目,你可以遵循以下步骤:创建项目目录结构:首先,你需要创建项目的目录结构,包括源代码文件、资源文件等。一个常见的项目结构如下:project_name/|-project_name/|-__init__.py|-module1.py......
  • brew 安装的python
    brew安装的Python简介Python是一种面向对象、解释型的高级编程语言。它非常流行,广泛应用于Web开发、数据分析、人工智能等领域。在macOS系统上,我们可以使用Homebrew(简称brew)来安装Python。Homebrew是macOS上的一个包管理器,可以方便地安装、升级和管理软件包。它会自动解决依赖......
  • Python爬虫实战之提高CSDN访问量
    python爬虫之建立代理池(一)_CodingInCV的博客-CSDN博客python爬虫之建立代理池(二)_CodingInCV的博客-CSDN博客前面2篇分别介绍了从2个免费代理网站爬取免费代理来构建我们自己的代理池。这一篇我们从实战的角度来将我们的代理池用起来,通过代理的方式访问我们的CSDN博客(CSDN会认为......
  • SAP ABAP 传输请求背后的读取函数和存储数据库表讲解试读版
    本教程前一篇文章,我们介绍了SAPABAP系统传输请求的基本知识:106.什么是SAPABAP系统里的传输请求(TransportRequest)有朋友提问:你好,有个问题请教下,在开发系统通过SM30维护会产生传输请求的配置表,这个传输请求对应的本次修改的内容存在哪里的呢?SE09相关CR里只有配置表......
  • Python入门 - 路径,文件夹
    路径#分隔符print(os.pathsep)#;print(os.altsep)#/print(os.extsep)#.#拼接print(os.path.join("a","b","c"))#a\b\c#绝对路径print(os.path.abspath("a/b/c"))#C:\Users\win\PycharmProjects\myTest\a\b\c......
  • Python入门 - 位运算
     a=0b1101b=0b1010print(a,b)#1310#与print(bin(a&b))#0b1000#或print(bin(a|b))#0b1111#异或print(bin(a^b))#0b0111,位不同的为1,相同的为0#非print(bin(~a))#-0b1110,-(a+1)#左移print(bin(a<<1))#0b11010#右移prin......