Как прочитать строку, разделенную запятыми, в одной ячейке, используя Python - PullRequest
0 голосов
/ 26 мая 2020

У меня есть проект, в котором вам нужно читать данные из файла Excel. Я использую openpyxl для чтения указанного файла. Я попытался сначала прочитать данные как строку, прежде чем преобразовывать ее в целое число; однако ошибка возникает из-за, я думаю, чисел в одной ячейке, разделенных запятой. Я пытаюсь создать вложенный список, но я все еще новичок в Python.

Мой код выглядит следующим образом:

# storing S
S_follow = []
for row in range(2, max_row+1):
  if (sheet.cell(row,3).value is not None):
  S_follow.append(sheet.cell(row, 3).value);
# to convert the list from string to int, nested list
for i in range(0, len(S_follow)):
S_follow[i] = int(S_follow[i])
print(S_follow)

Данные, которые я пытаюсь прочитать: ['2 , 3 ', 4,' 5,6 ', 8, 7, 9, 8, 9, 3, 11, 0]

надеюсь на вашу помощь

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Когда вы собираетесь преобразовать значения в целые числа в l oop во второй последней строке вашего скрипта, вы можете проверить, является ли каждое значение целым числом или строкой, и если это строка, просто разделите преобразуйте разделенные значения в целые числа и pu sh их во временный список с именем, скажем, strVal, а затем добавьте этот временный список в новый список с именем, скажем, S_follow_int. Но если значение не является строкой, просто добавьте их в S_follow_int, ничего не делая.

data= ['2,3', 4, '5,6', 8, 7, 9, 8, 9, 3, 11, 0]
S_follow = []
S_follow_int = []

for row in range(0, len(data)):
  if (sheet.cell(row,3).value is not None):
      S_follow.append(sheet.cell(row, 3).value);
      
# to convert the list from string to int, nested list
for i in range(0, len(S_follow)):
    
    #if the current value is a string, split it, convert the values to integers, put them on a temp list called strVal and then append it to S_follow_int
    if type(S_follow[i]) is str:
        x = S_follow[i].split(',')
        strVal = []
        for y in x:
            strVal.append(int(y))
        S_follow_int.append(strVal)
        
    #else if it is already an integer, just append it to S_follow_int without doing anything

    else:
        S_follow_int.append(S_follow[i])
    
print(S_follow_int)

Однако я бы порекомендовал вам проверить тип данных (str / int) каждого значения в исходном l oop, которое вы использовали для извлечения данных из файла Excel. вместо того, чтобы помещать все значения в S_follow и затем преобразовывать тип следующим образом:

#simplified representation of the logic you can use for your script

data = ['2,3', 4, '5,6', 8, 7, 9, 8, 9, 3, 11, 0]
x = []

for dat in data:
    if dat is not None:
        if type(dat) is str:
            y = dat.split(',')
            strVal = []
            for z in y:
                strVal.append(int(z))
            x.append(strVal)
        else:
            x.append(dat)
print(x)
0 голосов
/ 26 мая 2020
S_follow =  ['2,3', 4, '5,6', 8, 7, 9, 8, 9, 3, 11, 0]
for i in range(0, len(S_follow)):
    try:
        s = S_follow[i].split(',')
        del S_follow[i]
        for j in range(len(s)):
            s[j] = int(s[j])
        S_follow.insert(i,s)
    except AttributeError as e:
        S_follow[i] = int(S_follow[i])
print(S_follow)
...