Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 1, 2017 10:44:29

Binster
Зарегистрирован: 2017-12-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в массивы с файлов

Добрый день.
Начал изучать Python неделю назад, поэтому прошу не судить строго….
Вопросы заключается в следующем:
1) У меня есть несколько .csv файлов с разделителем “|” (могу изменить на любой).
1.1) Если я загружаю данные с файлов в массивы через:

 inputfile1 = "file1.csv"
FILE1 = open(inputfile1, mode='r', encoding='utf-8')
то при отображении данных по индексу, у меня значение - один символ, а не столбец до разделителя.
Пример:
 for a in FILE1:
 print(a[0])
Result - p (одна буква)
1.2) Я нашел реализацию импорта данных с csv файла, но возникла другая проблема:
 import csv
with open('file1.csv', newline='') as file1:
    FILE1 = csv.reader(file1, delimiter='|')
    for a in FILE1:
    ..... 
в данном случае отображение значения по индексу производится корректно, но если мне необходимо проверять значения, к примеру, 3-его столбца первого массива с значениями 2-ого столбца второго файла, то:
 import csv
with open('file1.csv', newline='') as file1:
    FILE1 = csv.reader(file1, delimiter='|')
with open('file2.csv', newline='') as file2:
    FILE1 = csv.reader(file2, delimiter='|')
    for a in FILE1:
     if a[3] in FILE2[2]
     .....
Result - ошибка
Вопрос - как можно импортировать два и более файлов через “import csv” и оперировать структурированными данными по столбйам?

2) У меня есть 10 файлов и мне необходимо проверять наличие значений переменной в группах из этих файлов. Я решил это просто:
 inputfile1 = "file1.csv"
inputfile2 = "file2.csv"
.......
inputfileN = "fileN.csv"
FILE1 = open(inputfile1, mode='r', encoding='utf-8')
FILE2 = open(inputfile2, mode='r', encoding='utf-8')
.......
FILEN = open(inputfileN, mode='r', encoding='utf-8')
variables = [aa, bb, cc, ca, ba, da, 1g] #К примеру
for x in variables:
   if x in (FILE1 and FILE2 and .... and FILEN):
     print(x) 

Вопрос - как можно выполнить open сразу нескольких файлов? (с целью уменьшения строк кода)

Я пробовал:
 inputfile1 = "file1.csv"
inputfile2 = "file2.csv"
FILES = open(inputfile1 or inputfile2 , mode='r', encoding='utf-8')
и
FILES = open(inputfile1 and inputfile2 , mode='r', encoding='utf-8')
и заключал имя файлов в скобки, но производится запись только одного файла в массив….
Возможно Вы сможете подсказать новичку решить данную задачу…
Заранее большое спасибо.

Офлайн

#2 Дек. 1, 2017 11:43:33

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в массивы с файлов

Привет нубу от нуба!

Щерт, при циторовании кода - кое что потерялось….((( надеюсь поймеш возвращаясь к своему коду…

Binster
1.1)
твоя переменная FILE1 - последовательность строк файла
переменна “а” принимает значения это последовательности в цикле.
т.е. на каждой итерации она = очередной строке из файла
твой срез а\ вернет первый символ исходной строки…

и разделители тут не при чем… в данном случае - твой символ разделитель - такойже символ в троке как и любой другой…

Можно разбить строку по разделителю, вот этим:
<строка>.split

Binster
1.2)

Вах! Вах! Чего намутил…))))
1. ну давай разберем что ты делаеш…
я не юзал csv.reader, но пердологаю что он делает то же самое что и split… и возвращет тебе список вложенных списков..
таким образом…
Binster
for a in FILE1:

на каждой итерации - “а” содержит список.

Binster
if a in FILE2

сравниваеш 4-ый ЭЛЕМЕНТ списка… с… ?? с чем?? с 3-м СПИСКОМ элементов из 2-го файла…

Т.е. скорее всего ты сравниваеш разные типы… и ошибка у тебя скорее всего про это…

2. в сообществах старайся выдавать наиболее полную инфу, ОСОСБЕННО по тексту возвращаемых ошибок… просто написать “к меня ошибка” и только - будет раздаржать…. так и хочется ответить - “проблема в чем-то” и все….)))

Binster
2)

Это смотря как стоит задача… если тебе прост вывести найденые значения, тогда можно… нуууу например, если формат имени файла известен и в нем есть индекс - в цикле открыть каждый файл и проверять в каждом каждую переменную….
можно в цикле склеить все прочитаное со всех файлов и просто в нем потом поискать….

Binster
FILES = open(inputfile1 or inputfile2 , mode='r', encoding='utf-8')

странно что то-то вообще делается… я так не пробовал….))) так-то у него на входе в этом место - СТРОКА… а ты ему логическое выражение пытаешся подать…))… я удивлен что он вообще додумался взять только первую ссылку на объект а остальное прогнорить в этом параметре…. ))

Хотя я так плотно файлами не занимался…. просто поранализировал написанное тобою… могу ошибаться…

Отредактировано Sdelayte_podskazku_imen (Дек. 1, 2017 11:46:20)

Офлайн

#3 Дек. 3, 2017 01:40:38

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Запись в массивы с файлов

Binster
попробуйте циклы

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version