【问题标题】:How to parse text file in python如何在python中解析文本文件
【发布时间】:2014-04-18 00:29:11
【问题描述】:

我有一个任务:我有一个包含许多文本文件的目录。每个文件有很多行。每行都有 Tab 删除字段。我必须通过将第一个字段中的值与另一个文本文件中的值进行比较来排除该文件中的某些行。我必须将那些“坏”行复制到一个新的“坏”文件中。我必须将“好”行(不匹配)复制到另一个“好”文件。最后我应该有很多新文件(“好”和“坏”)。换句话说,脚本应该解析目录中的每个文件,将每一行与另一个文件中的值进行比较,如果匹配,则将该行复制到新文件中。 我是这样写的:

import csv
import sys
import os

prefix = 'dna'
goodFiles = []
badFiles = []

fileList = os.listdir(sys.argv[1])

for f in fileList:
    absFile = os.path.join(os.path.abspath(sys.argv[1]), f )
    newBadF = "BADFile" + "_" + f
    badFile = open(newBadF,'w')
    newGoodF = "GOODFile" + "_" + f
    goodFile = open(newGoodF,'w')
    resultList = open(sys.argv[2], 'rb')
    convertList = list(resultList)
    with open(absFile, 'rb') as csvfile:
        reader = csv.reader(csvfile, delimiter='\t')
        for row in reader:
            for field in convertList:
                if row[0].lower() == field.strip():
                    badFile.writelines('"%s"\n' % row)
                    next
                else:
                    goodFile.writelines('"%s"\n' % row)
                    next

我的脚本不起作用 :) 即它生成的文件中每一行都是这样的列表: "['342', '343', '344', '345', '346', '347', '348', '349', '350']" 而原始文件具有不同的格式,即它没有逗号,它没有 '[' 和 ']' 我的问题:如何修复它并获得与原始文件格式相同的新文件? 谢谢

【问题讨论】:

    标签: python parsing


    【解决方案1】:

    如果您想要相同的分隔符,您可以像使用 csv.reader 一样使用 csv.writer

    bad_writer = csv.writer(badFile, delimiter='\t')
    good_writer = csv.writer(goodFile, delimiter='\t')
    ...
    if row[0].lower() == field.strip():
        bad_writer.writerow(row)
    else:
        good_writer.writerow(row)
    

    等等

    当你打电话时

    badFile.writelines('"%s"\n' % row)
    

    % 格式运算符实际上将行转换为字符串表示形式

    >>> _list = [1,2,3]
    >>> str(_list)
    '[1, 2, 3]'
    >>> 
    

    【讨论】:

    • C.B. - 谢谢,但是当我为此更改它时: with open(absFile, 'rb') as csvfile: writer = csv.writer(csvfile, delimiter='\t') for row in writer: for field in convertList: if row [0].lower() == field.strip(): badFile.writerow('"%s"\n' % row) 我有错误:> n:\scripts\deletemeafter\problemdna2.py(20) () -> writer = csv.writer(csvfile, delimiter='\t') (Pdb) s TypeError: TypeErro...Writer',) > n:\scripts\deletemeafter\problemdna2.py(20) () -> writer = csv.writer(csvfile, delimiter='\t') ..... TypeError: iteration ov
    • @susja 你不想替换阅读器,而是如上所述创建一个新的writer,然后执行writer.writewrow(row)(你将不再是进行字符串格式化)。更新了更多细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多