【问题标题】:write only specific lines from file a to file b仅将文件 a 中的特定行写入文件 b
【发布时间】:2019-05-16 13:26:15
【问题描述】:

我在只将感兴趣的行写入新文件时遇到问题。

f1文件由raws组成,内容如下:

line =
'Raw,512561008,58913000000,,,-1226439751087359050,0.0,6.748478024207768,,,0,14,0.0,16397,510195928489024,10,33.76073455810547,91.65148631320972,0.0037611895240843296,1,6907.217495186118,0.0018805947620421648,1.56109798E9,,,,0,,5,,1.56109798E9'

我有兴趣在索引 [-15:-14] 之间编写没有“5”作为值的行。我编写了以下函数,但是当我运行它时,新文件仍然包含不需要的行。如果有人能指出我做错了什么,我将不胜感激。谢谢!。

def CleanGNSSLogger(ASCIIfileName,filterStr=None):
   try:
      with open(ASCIIfileName, 'r') as f1, open(ASCIIfileName[:-4]+'_clean'+ASCIIfileName[-4:],'w') as f2:
          for line in f1:
              if line[-15:-14] != '5':
                  f2.write(line)
   except IOError as e:
      print ('Operation failed: %s' % e.strerror)

   return

【问题讨论】:

  • 如果我理解正确的话,你要指向过滤器值: ,,,,0,,5,,1.56109798E9 。但它看起来像一个 csv 文件,所以如果值不等于 1.56109798E9,那么你的索引就会出错。您必须通过 csv lib 读取此文件。
  • 很可能是这样,您要查找的数字或表达式并不总是在同一个索引中。正如@YangHG 建议的那样,如果它恰好是一个“csv”,那么你就会知道你必须检查哪一列来测试你的表达式或值是否存在。
  • 谢谢大家,我确实应该读过 csv lib。

标签: python string file new-operator


【解决方案1】:

我会做这样的事情,所以你要确保你感兴趣的值 (5) 是可访问的:

SOME_NAME_INDEX = 29 # or the correct location of the value of interest

def CleanGNSSLogger(ASCIIfileName,filterStr=None):
    try:
        with open(ASCIIfileName, 'r') as f1, open(ASCIIfileName[:-4]+'_clean'+ASCIIfileName[-4:],'w') as f2:
            for line in f1:
                values = line.split(",")
                if values[SOME_NAME_INDEX] != '5':
                    f2.write(line)
    except IOError as e:
        print ('Operation failed: %s' % e.strerror)

【讨论】:

  • 嗨,感谢您的帮助。按照您的建议,我设法只将感兴趣的行写入新文件:)
【解决方案2】:

试试

if "5" not in line[-15:-14]:

看看这是否有效。

【讨论】:

  • 它在我的原始脚本中不起作用。如果我在执行 line.split(",") 之后添加您的解决方案,它会起作用。谢谢:)
猜你喜欢
  • 2022-08-06
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2020-02-02
相关资源
最近更新 更多