создание двух отдельных списков, считанных из файла в python

#python #python-2.7 #python-3.x

#python #python-2.7 #python-3.x

Вопрос:

Могу ли я узнать, как данные из файла можно разделить на два отдельных списка. Например, файл содержит данные в виде 1,2,3,4;5,6,7

 my code:

for num in open('filename','r'):
  list1 = num.strip(';').split()
 

Здесь я хочу новый список перед точкой с запятой (т.е.) [1,2,3,4] и новый список после точки с запятой (т.е.) [5,6,7]

Комментарии:

1. list1 = num.split(';')[0].split(',') list2 = num.split(';')[1].split(',')

2. Содержит ли файл более одной строки? Что должно произойти при разрыве строки?

Ответ №1:

Если вы уверены, что ваш файл содержит только 2 списка, вы можете использовать понимание списка:

 l1, l2 = [sub.split(',') for sub in data.split(';')]
# l1 = ['1', '2', '3', '4']
# l2 = ['5', '6', '7']
 

В более общем плане,

 lists = [sub.split(',') for sub in data.split(';')]
# lists[0] = ['1', '2', '3', '4']
# lists[1] = ['5', '6', '7']
 

Если требуются целые числа, вы можете использовать второе понимание списка:

 lists = [[int(item) for item in sub.split(',')] for sub in data.split(';')]
 

Ответ №2:

Чтобы получить окончательный список, который вам "," также нужно разделить (и, возможно map() , результат int() ):

 with open("filename") as f: 
     for line in f:
         list1, list2 = [x.split(",") for x in line.rstrip().split(";")]
 

Ответ №3:

В зависимости от размера вашего файла, вы можете просто прочитать весь файл в строку сразу, а затем сначала разделить точкой с запятой, а затем запятой:

 with open('filename', 'r') as f:  #open file
    s = f.read()   #read entire contents into string
    lists = s.split(';')  #split separate lists by semicolon delimiters
    for l in lists:  #for each list
        l = [int(x) for x in l.split(',')]  #separate the string by commas and convert to integers