Найти - Пользователи
Полная версия: Запись в массивы с файлов
Начало » Python для новичков » Запись в массивы с файлов
1
Binster
Добрый день.
Начал изучать 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')
и заключал имя файлов в скобки, но производится запись только одного файла в массив….
Возможно Вы сможете подсказать новичку решить данную задачу…
Заранее большое спасибо.
Sdelayte_podskazku_imen
Привет нубу от нуба!

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

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')

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

Хотя я так плотно файлами не занимался…. просто поранализировал написанное тобою… могу ошибаться…
sander
Binster
попробуйте циклы
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB