c встроенные типы данных обнаруживают во входном текстовом файле с Python - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть входной текстовый файл, там есть некоторый код языка c.Я хочу определить из этого файла, сколько типов данных c включено, и будет сохранен другой выходной файл, но сначала я хочу показать мой входной текст, а затем под этим текстом мой другой код фильтрации отобразится в выходном файле.

В этом случае сначала я открыл файл в режиме «а» или в режиме добавления, но он работает наоборот.

Мой код

keyword = ['auto', 'double', 'int', 'struct', 'break', 'else', 'long', 
       'switch', 'case', 'enum', 'register', 'typedef', 'char', 
       'extern', 'return', 'union', 'const', 'float', 'short', 
       'unsigned', 'continue', 'for','signed', 'void', 'default', 
       'goto', 'sizeof', 'volatile','do', 'if', 'static', 'while']
f_read = open('input.txt', mode='r')
f_write =  open('output.txt', 'a')
for i in f_read.read():
    f_write.write(i)
f_read.close()
empty = []
for key in keyword:
    with open('input.txt', mode='r') as read_fp:
        if key in read_fp.read():
            if key in empty:
                empty[key] += 1
            with open('output.txt', 'w') as write_fp:
                empty.append(key)
                write_fp.write(' \n'.join(empty))
f_write.close()

мой ожидаемый выходной текстовый файл будет выглядеть следующим образом

My input text file all code 

      then

Data Types-------------Count

int                       1

float                     3

return                    1

в моем входном файле есть некоторый код c после фильтрации, он покажет 1 тип данных int, 3 float и 1 return.

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2019

Если вам нужно напечатать диктовку (я не использую ее в своем коде ответа)

for k,v in iteritems(mydict):
   print ('{}\t{}'.format(k,v))

мое решение вашей проблемы намного отличается от того, что вы пробовали, но должно соответствовать вашимтребования (и не обрабатывается, если ключевое слово комментируется ...)

import re

keyword = ['auto', 'double', 'int', 'struct', 'break', 'else', 'long',
       'switch', 'case', 'enum', 'register', 'typedef', 'char',
       'extern', 'return', 'union', 'const', 'float', 'short',
       'unsigned', 'continue', 'for','signed', 'void', 'default',
       'goto', 'sizeof', 'volatile','do', 'if', 'static', 'while']

read_fp = open('input.txt', 'r')
write_fp = open('output.txt', 'w')
content = read_fp.read()
for key in keyword:
    # here you have to count each occurrence of your keyword in content, I suggest you use regex :
    # the surrounding \W insure that you only match the keywords (e.g int doc_page = 0; shall not match
    # 'do'
    matches = re.findall('\W{}\W'.format(key), content)
    if matches:
       write_fp.write ('{}\t{}\n'.format(key, len(matches)))
read_fp.close()
write_fp.close()
...