9

私が求めているのと同じ作業を行う 2 つのコードがありますが、データ セットを便利にするための有用なコードまたはより優れたコードは得られませんでした。私 は2 TEXTファイルを 持って おり , 数字 が含まれ て いる名前 から 明らか な よう にinput_num, と 2 番目 に と 名付け られ ています . これら 2 ファイル は 8 から 10 メガバイト です . 「input_num.txt」input_datainput_num.txtinput_data

ASA5.txt DF4E6.txt DFS6Q7.txt

このinput_data.txt

>56|61|83|92|ASA5
Dogsarebarking

これら 2 つはテキスト ファイルの一部であり、input_data.txt最後の列に などを含みますASA5。これらは からのデータです。そのため、プログラムは最初に最後の列をinput_num.txtチェックし、上記のように値を含むgoto よりも、単語に戻り、それらを 4 にカットします。>56|61|83|92|ASA5ASA5input_num.txt5input_num.txt4input_data.txt

私はそれのための2つのコードを持っています:1は

import os
import re
file_c = open('num_data.txt')
file_c = file_c.read()
lines = re.findall(r'\w+\.txt \d+', file_c)
numbers = {}

for line in lines:
    line_split = line.split('.txt ')
    hash_name = line_split[0]
    count = line_split[1]
    numbers[hash_name] = count
file_i = open('input_data.txt')
file_i = file_i.read()

for hash_name, count in numbers.iteritems():
    regex = '(' + hash_name.strip() + ')'
    result = re.findall(r'>.*\|(' + regex + ')(.*?)>', file_i, re.S)

    if len(result) > 0:
        data_original = result[0][2]
        stripped_data = result[0][2][int(count):]
        file_i = file_i.replace(data_original, '\n' + stripped_data)
f = open('input_new.txt', 'wt')
f.write(file_i)
f.close()

そして2つ目は

import csv
output = open('output.txt' , 'wb')
def get_min(num):
    return int(open('%s.txt' % num, 'r+').readlines()[0])
last_line = ''
input_list = []

#iterate over input.txt in sort the input in a list of tuples 
for i, line in enumerate(open('input.txt', 'r+').readlines()): 
    if i%2 == 0: 
        last_line = line
    else:
        input_list.append((last_line, line))
filtered = [(header, data[:get_min(header[-2])] + '\n' ) for (header, data) in input_list]
[output.write(''.join(data)) for data in filtered]
output.close()
4

1 に答える 1