开发者社区> 问答> 正文

请教:怎样用python读取文件之后,处理在下一行、空行、和*星星?:报错

我有一个.txt文件,是一个电路的网表图,它的形式大概是这样的: 
  
** 我是.txt网表图生成于2014年11月11日 信来砍 
电容A A的电容值 A的位置 
电容B B的电容值 B的位置 
电感C C的电感值 C的位置 
电阻D D的电阻值 D的位置 
(这是一个空行什么都没有) 
二极管E E的尺寸 E的位置 
二极管F F的尺寸 F的位置 
三极管G G的尺寸 G的位置 
  
我需要用python读取这个.txt文件,然后 
1 删除所有以两个星星开头的行(电路的网表图.txt文件的注释是两个星星); 
2 删除所有空行; 
3 删除所有既以“二极管”开头、又在“三极管”所在行正上方的行。所以,我需要用python生成的文件是这样的: 
  
电容A A的电容值 A的位置 
电容B B的电容值 B的位置 
电感C C的电感值 C的位置 
电阻D D的电阻值 D的位置 
二极管E E的尺寸 E的位置 
三极管G G的尺寸 G的位置 
  
这3个操作我都想请教大家。这是我写的python: 
  
row_count = 0 
row_count_next = 0 
list_row = [] 
f_in = file(CKT_R, "r") 
f_in_split = f_in.read().splitlines() 
f_out = file(CKT_W, "w") 
for row in f_in_split: 
     row_count_next = row_count + 1 
     row_count = row_count + 1 
     if row.startswith('
'): 
                 删掉这个row 
     if (row.startswith('') and row.endswith('')): 
                 删掉这个row 
     if f_in_split[row_count_next].startswith('三极管')): 
         …… 
  
问题1是:row.startswith('')中的两个星星,python不认为它们只是普通符号,而是类似*arg或者arg之类的表示省略的符号…… 
  
问题2是:row.startswith('') and row.endswith(''),空行在python中如何表示? 
  
问题3是:我用row_count_next = row_count + 1来让python读下一行,但是假设这个.txt文件只有3行,python会试图去读第4行、然后报出一个out of index的error…… 
  
请问这3个问题如何解决?谢谢! 

展开
收起
kun坤 2020-06-07 15:59:47 684 0
1 条回答
写回答
取消 提交回答
    1. '' 不是特殊字符,试过也不会有问题,实在不放心试试 r''
      2. row.strip() == ''
      3. 用len( f_in_split) >= row_count_next 判断一下该不该走下一步呗
      ######谢谢了!很及时!######

      1 直接用下面语句,startswith的参数是一个正则表达式,**匹配的是一个或多个字符,详见正则表达式

    row[:2] == '**'
    2 匹配字符串可用下面的表达式,去掉左右两端的空白后判断长度
    if len(row.strip()) == 0:
        #this is a empty line
        pass
    3 不要再遍历列表中删除它的元素,用列表生成表达式######谢谢了很及时!######谢谢楼上两位了!
    2020-06-07 15:59:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载