Как заменить первое число перед пробелом в каждой строке в текстовом файле - PullRequest
0 голосов
/ 17 марта 2019

Мой файл выглядит следующим образом:

12.32 1:34 2:49 5:21 29:98
13.53 1:23 2:82 5:23 29:45
51.92 1:23 2:54 5:54 29:63
12.42 1:34 2:43 5:32 29:32

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

21.33 1:34 2:49 5:21 29:98
16.23 1:23 2:82 5:23 29:45
93.12 1:23 2:54 5:54 29:63
18.76 1:34 2:43 5:32 29:32 

Какой будет хороший метод?

Я попытался указать на число с помощью

with open('file.txt', 'r') as file:
    line = file.readline()
    line[0]

, но он просто дает мне первыйхарактер, а не весь номер.Большое вам спасибо!

Ответы [ 3 ]

1 голос
/ 17 марта 2019

Вы можете использовать следующий метод для достижения этой цели: -

data = None
with open('file.txt', 'r') as file:
    data = file.read()

def process_line_item(x):
    index = x[0]
    line_str = x[1]
    new_first_value = [str(x[0])] # you can put here new value depending on line index
    return ' '.join(new_first_value + x[1].split(' ')[1:])

new_data = '\n'.join(list(map(process_line_item, enumerate(data.split('\n')))))

with open('new_file.txt', 'w') as file:
    file.write(new_data)

file.txt

12.32 1:34 2:49 5:21 29:98
13.53 1:23 2:82 5:23 29:45
51.92 1:23 2:54 5:54 29:63
12.42 1:34 2:43 5:32 29:32

new_file.txt

0 1:34 2:49 5:21 29:98
1 1:23 2:82 5:23 29:45
2 1:23 2:54 5:54 29:63
3 1:34 2:43 5:32 29:32
0 голосов
/ 17 марта 2019

Этот код должен сработать, однако он может быть немного неисправен и, возможно, потребуется немного доработать и протестировать. Надеюсь, это поможет.

with open('file.txt', 'r') as file:
    file_content = file.read()
    list_content = [letter for letter in file_content]
    num_length = 0
    for i, char in enumerate(list_content):
        num_length += 1
        if list_content[i - 1] == '\n':
            num_length = 0

        elif char == ' ':
            start_index = i - num_length
            for _ in range(num_length + 1):
                list_content.pop(start_index)

            list_content.insert(start_index, your_new_number)

    out_text = ''.join(list_content)

with open('file.txt', 'w+') as file:
    file.write(out_text)
0 голосов
/ 17 марта 2019

вы можете использовать модуль csv с delimiter=" ":

from csv import reader

with open('file.txt', 'r') as file:
    csv_reader = reader(file, delimiter=" ")
    for row in csv_reader:
        row[0] = '??.??'
        print(row)

, который выдает

['??.??', '1:34', '2:49', '5:21', '29:98']
['??.??', '1:23', '2:82', '5:23', '29:45']
...

, обратите внимание, что ваши числа будут строками.вам, возможно, придется преобразовать их в числа с плавающей запятой:

floats = [float(item) for item in row]

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

...