2013-07-01 3 views
0

У меня есть foo.txt файл с содержимымфильтрации строки определенной длины из файла

'w3ll' 'i' '4m' 'n0t' '4sed' 't0' 

'it' 

и я пытаюсь извлечь все слова с 2-мя символами в них. Я имею в виду, выходной файл должен иметь только

4m 
t0 
it 

То, что я пытался есть,

with open("foo.txt" , 'r') as foo: 
    listme = foo.read() 

string = listme.strip().split("'") 

Это будет разделить строки с 'знак, я полагаю. Как я могу выбрать только те строки в пределах этих знаков апострофа, чей символ равен 2?

ответ

1

Учитывая, что вы хотите, чтобы найти все слова, содержащиеся в '' символов, которые точно двух символов:

import re 
split = re.compile(r"'\w{2}'") 

with open("file2","w") as fw: 
    for word in split.findall(open("file","r").read()): 
      fw.write(word.strip("'")+"\n") 
1

Это должно работать:

>>> with open('abc') as f, open('output.txt', 'w') as f2: 
...  for line in f: 
...   for word in line.split(): #split the line at whitespaces 
...    word = word.strip("'") # strip out `'` from each word 
...    if len(word) == 2:  #if len(word) is 2 then write it to file 
...     f2.write(word + '\n') 

print open('output.txt').read() 
4m 
t0 
it 

Использование regex:

>>> import re 
>>> with open('abc') as f, open('output.txt', 'w') as f2: 
    for line in f: 
     words = re.findall(r"'(.{2})'",line) 
     for word in words: 
      f2.write(word + '\n') 
...    
>>> print open('output.txt').read() 
4m 
t0 
it 
+0

@abhikafle Любая ошибка? пожалуйста, разместите такие примеры в вопросительном органе не в комментариях, так как они не читаемы. –

+0

Спасибо @Ashwini. но метод regex принимает две разные строки, разделенные запятой как единое целое. когда я запустил код, чтобы найти 20 символов. слово, оно дало мне «, 9,« 1186148119 »,« »как вывод, который все еще действителен, но состоит из множества строк, а не только одного. –

+0

@abhikafle ваш входной вход для примера не содержит '', '', поэтому я не справился с ними. Пожалуйста, опубликуйте такие вещи, о которых идет речь. –

0
with open("foo.txt" , 'r') as file: 
    words = [word.strip("'") for line in file for word in line.split() if len(word) == 4] 

with open("out", "w") as out: 
    out.write('\n'.join(words) + '\n') 
0

Поскольку вы читаете процитированные слова, разделенные пробелами (или запятыми) можно использовать модуль CSV:

import csv 

with open('/tmp/2let.txt','r') as fin, open('/tmp/out.txt','w') as fout: 
    reader=csv.reader(fin,delimiter=' ',quotechar="'") 
    source=(e for line in reader for e in line)    
    for word in source: 
     if len(word)<=2: 
      print(word) 
      fout.write(word+'\n') 

'out.txt':

i 
4m 
t0 
Смежные вопросы