Загрузка файла с разделителями с переменным количеством столбцов в базу данных с использованием Python - PullRequest
0 голосов
/ 09 октября 2018

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

1,a,x
2,b
3,c,y,z

Теперь мне нужно загрузить все строки в базу данных, скажем, postgres \ sql server.Схема таблицы следующая:

Table : test
columns : col1 (nvarchar(max)),col2 (nvarchar(max)),col3 (nvarchar(max))

Данные должны быть загружены, как показано ниже

col1   col2   col3
1       a       x
2       b       Null
3       c       y,z

Таковы правила загрузки 1) Если количество столбцов в файле меньше, чемстолбцы в таблице, пропущенные столбцы должны быть заменены на нули 2) Если количество столбцов в файле больше, чем столбцы в таблице, все дополнительные данные должны быть сохранены в последнем столбце.

Может кто-нибудь предложить мне лучшееспособ сделать это

1 Ответ

0 голосов
/ 09 октября 2018

Попробуйте выполнить следующее, читая файл, используя pd.read_fwf.

df = pd.read_fwf(filename, delimiter=',', header=None)

Теперь нам нужно объединить все столбцы после 'col3' в col3:

df.iloc[:,2] = df.iloc[:,2:].astype(str).apply(tuple, axis=1).str.join(',').str.replace(',nan', '')

df = df.iloc[:,:3]
df.columns = ['col1', 'col2', 'col3']

Пример

данные в filename:

1,a,x
2,b
3,c,y,z
4,d,s,f,d,s

Df при чтении файла с использованием pd.read_fwf:

    0   1   2   3   4   5
0   1   a   x   NaN NaN NaN
1   2   b   NaN NaN NaN NaN
2   3   c   y   z   NaN NaN
3   4   d   s   f   d   s

Выводпосле вышеуказанной операции:

   col1  col2   col3
0   1      a    x
1   2      b    nan
2   3      c    y,z
3   4      d    s,f,d,s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...