Как прочитать файл и скопировать определенные числа от использования ключевых слов в Excel или другой текстовый файл? - PullRequest
0 голосов
/ 03 апреля 2019

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

Исходный файл представляет собой файл суммы (хотя по сути это просто текстовый файл)

И частично в этом файле есть несколько CP, я хочу получить значение v = и G= значениеА затем поместите их в массив в текстовом файле. Например, в файле он напечатан наполовину:

enter image description here

  import os
  from glob import glob

  list_of_files = glob('*.sum')  # get list of all .sum files

  for file in list_of_files:
      with open(file, 'r') as f: 
          content = f.read()

          # not sure how to find the keyword 'i.e. G=' and print what is 
          # behind 
          g = content        

          f = open("excelsheet.txt", "w+")   
          f.write(content)

1 Ответ

0 голосов
/ 03 апреля 2019

Вы можете использовать пакеты csv и re, чтобы найти нужные вам строки.

Читайте в файле, как вы показали.Я тестирую свой скип со следующим «текстовым файлом»

text = '''
CP# 1
V = -3.02132E+02
G = -5.15550E+12
K = -9.84693E+06
L =  1.16878E+06

CP# 2
V =  5.53209E+08
G =  6.06581E+08
K = -7.41506E+18
L = -9.87995E+02

CP# 3
V =  5.47807E+08
G = -5.03863E+00
K = -1.09701E+12
L = -5.30051E+09
'''

Теперь, когда у вас есть загруженный файл, используйте пакет re, чтобы найти искомые совпадения.Вы можете использовать ссылку выше, чтобы узнать больше о синтаксисе.

h_matches = re.findall(r'CP#\s\d', text)
v_matches = re.findall(r'(?<=V\s=)\s+[0-9+-E]+', text)
g_matches = re.findall(r'(?<=G\s=)\s+[0-9+-E]+', text)

headers  = [h for h in h_matches]
v_values = [m for m in v_matches]
g_values = [m for m in g_matches]

После того, как у вас есть все совпадения, используйте csv, чтобы записать данные в файл CSV.

with open('example.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['header', 'V', 'G'])

    for h, v, g in zip(headers, v_values, g_values):
        writer.writerow([h, v, g])

Ниже приведен вывод в example.csv

header,V,G
CP# 1, -3.02132E+02, -5.15550E+12
CP# 2,  5.53209E+08,  6.06581E+08
CP# 3,  5.47807E+08, -5.03863E+00

Если вы хотите записать в существующий лист Excel, вы можете оформить заказ xlsxwriter

...