Найдите файл и сохраните строки, в которых находится искомый термин, в новый файл. - PullRequest
2 голосов
/ 24 июля 2010

У меня есть два файла.Один из них представляет собой CSV-файл и содержит строки поиска (по одной на строку), а другой - огромный файл, содержащий поисковый запрос в начале каждой строки, но содержащий дополнительную информацию, после которой я хотел бы извлечь.

Файл поисковых терминов называется search.csv и выглядит следующим образом:

3ksr

3ky8

2g5w

2gou

Файл, содержащий другую информацию, называется CSA.txt и выглядит следующим образом:

3ksr,INFO.....

3ky8,INFO.....

2g5w,INFO.....

2gou,INFO.....

Тем не менее, это очень большой файл (более 8 МБ), и каждый поисковый запрос встречается более одного раза, но информация различна для каждого случая.У меня есть пример кода:

import fileinput
import csv

csa = fileinput.input("CSA.dat", inplace=1)
pdb = csv.reader(open("search.csv"))
outfile = csv.writer(open("outfile.csv"), dielect = 'excel', delimiter = '\t')

for id in pdb:
    for line in csa:
        if id in str(line):
            outfile.writerow([id, line])

csa.close()

Однако этот код не работает и, похоже, удаляет CSA.dat каждый раз, когда я пытаюсь запустить его (его резервная копия в архиве), или он говорит «Текстовый файл».занятый'.Пожалуйста помоги!Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 июля 2010

В зависимости от того, сколько поисковых терминов у вас есть, и при условии, что они все 4 символа:

terms = open('search.csv').split(',')

with open('CSV.dat', 'r') as f:
   for line in f:
       if line[:4] in terms:
           #do something with line
           print line

, если они не 4 символа, вы можете сделать line[:line.find(',')], который вернет либо доfirst ',' или, если он не найден, он вернет всю строку.

edit: Я никогда не слышал о входе файла, но я только посмотрел на него и "вы делаетеэто неправильно. "

Вспомогательный класс для быстрой записи цикла над всеми стандартными входными файлами.

fileinput предназначен для передачи файлов в вашу программу в качестве аргументов командной строки,что ты не делаешь.open(filename, mode) - это то, как вы открываете файлы в Python.

И для чего-то, что (кажется) так просто, программа для чтения csv излишня, хотя, вероятно, стоит использовать ее для записи файла, если вы действительно хотите его в Excelформат.

0 голосов
/ 24 июля 2010

Похоже, что удаление CSA.dat происходит, потому что вы говорите inplace = 1 в конструкторе fileinput.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...