Преобразовать строку в список? - PullRequest
0 голосов
/ 03 апреля 2020

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

CROPWAT 8.0 Climate data
 0   6

Ananthapur
-99.90
 -99.90  -99.90
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     3.90
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     4.77
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     5.78
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     6.30
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     6.17
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     5.06
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     4.49
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     4.41
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     4.49
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     4.12
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     3.68
 -99.9 -99.9  -99.9  -99.9  -99.9 -99.9     3.48

new_data = ['3.10', '3.71', '4.46', '4.83', '5.02', '4.72', '4.09', '3.96', '3.84', '3.54', '3.15', '2.93']

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Разделить строку s на заголовок (первые 6 строк) и таблицу (оставшиеся строки):

rows = s.split("\n")
header = rows[:6]
table = rows[6:]

Заменить хвост каждой строки в таблице новым значением: для каждой строки найдите самый правый пробел, возьмите фрагмент строки от начала до этого пробела и объедините его с патчем.

new_table = [(row[:row.rfind(" ")+1] + patch) 
             for row,patch in zip(table, new_data)]

Повторно объедините заголовок и обновленную таблицу:

"\n".join(header + new_table)
0 голосов
/ 03 апреля 2020

Базовая линия будет отделена от col [6] и заменена новым списком. Вы можете использовать .split (), чтобы разделить файл. Пример примера

try:
  fhand = open('/pathtoyourfile')
except:
print('file not found !!!')
   exit()

new_data = ['3.10', '3.71', '4.46', '4.83', '5.02', '4.72', '4.09', '3.96', '3.84', '3.54', '3.15', '2.93']
for value,line in zip(new_data,fhand):
    elements = line.split( )
    print("{}\t{}\t{}\t{}\t{}\t{}\t{}".format(elements[0], elements[1],elements[2],elements[3],elements[4],elements[5] ,value,elements[6]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...