Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11

Создать csv на основе двух

02.04.2015, 13:04. Показов 2037. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать csv файл, который будет содержать 3 строки. Но он создан на основе двух уже существующих.
В одном данные формата:
9428528185289120525690074250961853129157 26798045
5713771119064300086121094190447396392947 390662
32311140742657220883656374427196
9573592184772643779214919137184189979934 869047013469
12262210794301470398905055140579395
В другом:
257378415,lambda,one
323111411,upsion,twelve
25737840,alpha,seven
323111412,chi,eight
323111415,gamma,two
323111414,upsion,fifteen
571377108,beta,five
323111416,chi,eleven
А в третьем должно быть полноценный:
То есть если номер второго файла начинается на цифры первого, то вставлять полноценное число первого файла.
Данные должны выглядеть следующим образом:
2573784013019141463206393979394814085243 23198549112 => ,lambda,one

Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import csv
 
#Беру данные с первого файла
input_file1 = open('src.csv', 'rb')
rdr = csv.reader(input_file1)
rdr_data = [row for row in rdr]
input_file1.close()
 
#данные со второго файла
input_file2 = open('data.dat', 'rb')
rdr2 =  csv.reader(input_file2)
rdr_data2 = [row for row in rdr2]
input_file2.close()
 
#Создаю переменные для того, чтобы сравнить есть ли первая строчка row[0] первого файла в первой строчке  #row[0] второго #файла
my_row = [[row[0]] for row in rdr_data]
my_longrow = [[row[0]] for row in rdr_data2]
 
#Создаю новый файл, в котором буду сохранять мои новые данные
output_file = open('new.csv', 'wb')
wrtr = csv.writer(output_file)
 
#новый список для сохранения, но не могу правильно сделать, чтобы он отображал мне первую строчку row[0] #второго файла и вторую row[1] и третью строчку row[2] второго файла
new_data = [[row[1], row[2]] for row in rdr_data]
 
#Здесь я думаю задать условия наличия input_file1 row[0] в input_file2 row[0]
if my_row in my_longrow:
  for row in new_test_data:
    wrtr.writerow(row)
output_file.close()
# но понятное дело ничего не работает, помогите.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2015, 13:04
Ответы с готовыми решениями:

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

На основе двух матриц создать третью
Построчно ввести матрицу целых чисел 5×5, вторую матрицу за-полнить случайными числами < 100. Сформировать третью матрицу: каждый ее...

Создать массив на основе двух других по следующим правилам
Дан массив A из натуральных чисел в диапазоне от 1 до 1000. Всё двузначные числа в этом массиве заменить на 0. Имеется второй массив целых...

10
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2015, 13:29
У Вас есть строка второго файла(row2=row.split(',')), из которой Вы берете 1-й элемент, который надо сравнивать с началом каждого элемента 1-го файла (if row1.startswith(row2[0])). Если совпадение найдено, то 1-й элемент 2-го файла = найденый элемент 1-го. Осталось записать.
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11
02.04.2015, 14:02  [ТС]
Marinero, вы извините, но не могу разобраться как вы берете в переменную строку второго файла, и строку первого файла. У вас написано row1 и row2. Как мне эти значения вытащить из файла? (row2=row.split(',')) - это вообще пишет AttributeError: 'list' object has no attribute 'split'

Добавлено через 15 минут
Также еще и AttributeError: 'list' object has no attribute 'startswith'
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2015, 15:19
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import csv
 
#Беру данные с первого файла
with open('src.csv', 'rb') as input_file1:
    rdr = csv.reader(input_file1)
    rdr_data = [row for row in rdr]
 
#данные со второго файла
rows=''
with open('data.dat') as input_file2:
    for row in input_file2:
        line=row.split(',')
        for row1 in rdr_data:
            if row1.startswith(line[0]):
                line[0]=row1
                break
        rows+=','.join(line) + '\n'
 
#Создаю новый файл, в котором буду сохранять мои новые данные
with open('new.csv', 'w') as output_file:
    output_file.write(rows)
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11
02.04.2015, 18:34  [ТС]
Большой и огромный поклон за попытку. Всегда ценю таких людей.
Но на моменте if row1.startswith(line[0]):
выдает ошибку:
AttributeError: 'list' object has no attribute 'startswith'

Добавлено через 31 минуту
Сейчас ближе склонен к этому:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import csv
 
rows=''
with open('data.dat', 'rb') as input_file2:
    for row in input_file2:
        line=row.split(',')
        with open('src.csv', 'rb') as input_file1:
            for row1 in input_file1:
                if row1.startswith(line[0]):
                    line[0]=row1
                    break
        rows+=','.join(line) + '\n'
 
with open('new.csv', 'wb') as output_file:
    output_file.write(rows)
Но результат пока только таков:
Python
1
2
3
4
5
6
7
697733304440804980633599594374136
 
49368461442511413581267118180905236914381277
 
9421745089119049364842164240972606295751238
 
5649219121733231744107576366920455109455685070016
Не могу понять почему вставляет пустые строки, и почему не добавляет 2 атрибута с второго файла.. =(
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2015, 18:43
Я не работал с csv, так что ошибки могут проявляться. Показали бы пример строки row1 вставив инструкцию print(row1). А так
Python
1
                  if row1.startswith(line[0]):
поменяйте на
Python
1
       if ''.join(row1).startswith(line[0]):
Вы хотите чтоб вообще всё сделали вместо Вас?

Добавлено через 6 минут
Чтоб не добавляло пустые строки можно убрать + '\n'
Покажите что получается в line: print(line)
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11
02.04.2015, 18:45  [ТС]
Идет бесконечный перебор данных с data.dat print(line):

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
['5279891117439308653637057135104739605008\n']
['493684611295181211319796431661523538474591785870\n']
['49368461056705650885149095305141\n']
['15133121420183535438001436174690140768\n']
['69168261734552717843675674816637355007\n']
['12262211508603940018217872068488538540097\n']
['151331204603987277077929016089432\n']
['3238469155271709321141584854598165327804241771\n']
['942852814462110353463878072874744\n']
['5542566143921277282961167233335407052695\n']
['49368461102932658518622250193270586\n']
['122622117916644076488494010352625762624622018692717\n']
['957359217113033325369143403529102945038780\n']
['323846901954808789506148665983066297707529134\n']
['52798910798103467658397081419662790868257\n']
['1226221085956738180059250304285059120\n']
['5279891151260528826561446932869050\n']
['564921917919921702759786764911043414069883216\n']
['323111407281355370465489266870846051630020894\n']
['6977333150882914160257635834875690705002791114\n']
['5649219112961666392615678012218550056605135527932\n']
print row1:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
['571377101', 'gamma', 'three']
['564921912', 'alpha', 'fifteen']
['564921910', 'nu', 'one']
['564921911', 'mu', 'fourteen']
['564921916', 'iota', 'fifteen']
['564921917', 'delta', 'fifteen']
['564921914', 'sigma', 'eight']
['493684617', 'phi', 'fifteen']
['564921918', 'mu', 'thirteen']
['493684614', 'theta', 'thirteen'
['32384690', 'upsion', 'one']
['323846904', 'theta', 'eight']
['771261818', 'epsilon', 'ninetee
['554256601', 'zeta', 'nine']
['771261812', 'xi', 'twenty']
['771261810', 'phi', 'one']
['771261811', 'upsion', 'eighteen
['771261816', 'gamma', 'six']
['771261817', 'xi', 'ten']
['771261814', 'mu', 'four']
['771261815', 'beta', 'fourteen']
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2015, 19:00
Лучший ответ Сообщение было отмечено viziq как решение

Решение

Вы же файлы наоборот написали! В line должно быть ['571377101', 'gamma', 'three'] из которого и берется первый элемент line[0]=571377101 и ищется в row1 - ['527989111743930865363705713510473960500 8\n']
Уберите 'rb' — уберутся пустые строки (ну и import csv уже не нужен)
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11
02.04.2015, 19:17  [ТС]
Все верно. Спасибо. Все-таки сработал мой вариант кода:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
rows=''
with open('src.csv') as input_file2:
    for row in input_file2:
        line=row.split(',')
        with open('data.dat') as input_file1:
            for row1 in input_file1:
                if row1.startswith(line[0]):
                    line[0]=row1
                    break
        rows+=','.join(line)
 
with open('new.csv', 'wb') as output_file:
    output_file.write(rows)
Извиняюсь за свою безграмотность, но все-же сейчас данные такого формата:
Python
1
2
3
4
257378418033241770592104904692476296
,chi,six
32384690835225932913282061910455
,phi,twelve
Хочу чтобы вот так были:

Python
1
2
257378418033241770592104904692476296 =>,chi,six
32384690835225932913282061910455 =>,phi,twelve
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2015, 19:32
Python
1
line[0]=row1.strip('\n') + ' =>'
Оба кода рабочие, только у Вас на каждую строку одного файла открывается и прогоняется второй файл. В моем — один раз считывается в список и потом работа только со списком => более эффективно.
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 11
02.04.2015, 19:38  [ТС]
Спасибо огромное.
Знал бы лично, шоколадкой угостил бы :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2015, 19:38
Помогаю со студенческими работами здесь

Создать третий массив на основе двух заданных массивов по условию
Создать 2 динамических массива различной размерности, указанной пользователем. Далее создать третий массив, в который поместить элементы...

Python.csv.library создать функции удаления и редактирования данных о книге, хранящихся в csv
консольный интерфейс предполагает нажатие 1-5 клавиш со следующим функционалом: 1 - выводит список книг 2 - добавляет данные о новой...

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

Как грамотно создать Recordset в текущей базе на основе SQL - запроса или просто на основе таблицы?
Как грамотно создать Recordset в текущей базе на основе SQL - запроса или просто на основе таблицы?

Выполните задание с применением собственных функций на основе набора данных films.csv
Выполните задание с применением собственных функций на основе набора данных films.csv: У какого из режиссеров самый высокий процент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru