Этот скрипт преобразует данные в базе данных с разделителями табуляции. Существуют локальные идентификаторы (столбец [0] в local.csv), которые являются неверными. Импортированные идентификаторы (столбец [3] в import.txt) заменяют локальные идентификаторы.
import csv
importedIds = open("import.txt", 'r') #Database with correct IDs
localIds = open("local.csv", 'r') #Databse with incorrect IDs
programs = open("programs.txt", 'w') #New database
for localLine in localIds:
columnLocalIds = localLine.strip().split('\t') #'\t' is tab delimination
for importedLine in importedIds:
columnPrograms = importedLine.strip().split('\t') #Change local ID to imported ID
columnLocalIds[0] = columnPrograms[3] #Transform data
toWrite = columnLocalIds[0] + "\n "
programs.write(toWrite) #Write new databse
importedIds.close()
localIds.close()
programs.close()
Некоторые примеры данных:
local.csv (с неверными идентификаторами для преобразования)
12345 John Doe 01/01/1980
23456 Foo Bar 02/02/1980
import.txt (с сохранением правильных идентификаторов)
John Doe 01/01/1980 AA12345
Foo Bar 02/02/1980 AA23456
Скрипт работает. Он будет записывать правильные идентификаторы в новый файл, но тогда у меня, естественно, нет остальной базы данных. Я могу думать о двух способах продолжить. 1) Записать данные обратно в local.csv (кажется, это лучший метод, но я не знаю, как это сделать) или 2) переписать остальную часть базы данных в Programs.TXT. Я пытался последнее: columnLocalIds[0] + "\n " + columnLocalIds[1] + columnLocalIds[2]…
Это приводит к ошибке для любого columnLocalIds[$]
> [0], который будет считаться вне диапазона индекса. Я подозреваю, что это потому, что индекс не заполняется во вложенных циклах for. Как тогда лучше подойти к преобразованию данных?