Как редактировать информацию * .txt или * .dat в Python?

Я очень новичок в Python и имею следующую «проблему». Я был бы рад, если бы вы могли мне помочь)

У меня есть файл * .dat (давайте назовем его файлом-1 , первая строка – это просто заголовок, который я использую только здесь, чтобы отметить столбцы), который выглядит так:

1 2 3 4 5 6 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 6 5 -1000 "" "" "" 

Мне нужно, чтобы это было похоже ( файл-1 (преобразованный) ):

 6 5 1 -1000 6 5 1 -1000 6 5 2 -1000 6 5 3 -1000 6 5 3 -1000 6 5 3 -1000 6 5 3 -1000 

Таким образом, файл-1 имеет 9 строк (7 с информацией и 2 пустых) и 6 столбцов, и я должен сделать следующее:

  1. Удалите последние 3 столбца в файле-1.
  2. Добавьте 1 новый столбец, который будет проходить между столбцами 2 и 3.
  3. Значение этого нового столбца должно быть увеличено на 1 единицу (например, «+ = 1») после прохождения пустой строки.
  4. Удалите все пустые строки. Результат представлен как «файл-1 (преобразованный)».

Я пытался это сделать, но застрял. На данный момент я нахожусь на уровне:

 import sys import csv with open("file-1.dat", "r", newline="") as f: sys.stdout = open('%s2 (converted).txt' % f.name, 'a') incsv = csv.reader(f, delimiter="\t") for row in incsv: if len(row) == 6: i = 0 row = row[0:3] row.insert(2, i) print(row) 

и это выглядит так:

 ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] 

Я пока не знаю, как изменить 0 на 1 и 2 и так далее, так что это может быть похоже:

 ['6', '5', 0, '-1000'] ['6', '5', 0, '-1000'] ['6', '5', 1, '-1000'] ['6', '5', 2, '-1000'] ['6', '5', 2, '-1000'] ['6', '5', 2, '-1000'] ['6', '5', 2, '-1000'] 

И результат должен быть похож на файл file-1 (convert).

PS Все примеры упрощены, у реального файла много строк, и я не знаю, где появятся пустые строки.

PPS Извините за такой длинный пост, надеюсь, это имеет смысл. Спросите, предложите – я был бы очень рад видеть другие мнения) Спасибо.

Это немного отличается без использования модуля csv . Надеюсь это поможет. 🙂

 import sys count = 0 with open("file-1.dat", "r") as f: sys.stdout = open('%s2 (converted).txt' % f.name, 'a') for line in f: converted_line = line.split()[:-3] #split each line and remove last 3 column if not converted_line: # if list/line is empty count += 1 #increase count but DO NOT PRINT/ WRITE TO FILE else: converted_line.insert(2,str(count)) # insert between 2nd and 3rd column print ('\t'.join(converted_line)) # join them and print them with tab delimiter 

похоже, что вы почти там, вы просто вставляете i=0 все время вместо количества пустых строк, попробуйте что-то вроде:

 with open("file-1.dat", "r", newline="") as f: sys.stdout = open('%s2 (converted).txt' % f.name, 'a') incsv = csv.reader(f, delimiter="\t") empties = 0 # init empty row counter for row in incsv: if len(row) == 6: row = row[0:3] row.insert(2, empties) # insert number of empty rows print(row) else: empties += 1 # if row is empty, increase counter 

Вам нужно увеличить i на каждой пустой строке

 import sys import csv with open("file-1.dat", "r") as f: sys.stdout = open('%s2 (converted).txt' % f.name, 'a') incsv = csv.reader(f, delimiter="\t") incsv.next() # ignore first line i = 0 for row in incsv: if len(row) == 6: row = row[0:3] row.insert(2, i) print(row) elif len(row) == 0: i += 1 

Кроме того, я не смог выполнить свой код на своей машине (с Python 2.7.6 ). Я изменил код в соответствии с запуском с Python 2.x

Изменить : я вижу, что он работает с Python 3.x