2010-10-08 4 views
1

У меня есть следующие строки в файле, где я хочу взять третий столбец; В файле у меня нет номеров столбцов:Python: цикл через файл для определенных строк

  1. Красный; Синий; Зеленый; Белый; Оранжевый;
  2. Зеленый; Белый; Оранжевый;
  3. Голубой; Зеленый; Белый;
  4. Красный; Синий; Зеленый; Белый;
  5. Голубой; Зеленый; Белый; Оранжевый;
  6. Оранжевый цвет
  7. Зеленый; Белый; Оранжевый;
  8. Белый; Orange
  9. Зеленый;

Я использовал эту строку кода, чтобы сделать это:

lines = i.split(";")[2] 

Проблема заключается в том, что некоторые линии имеют только один или два столбца, так что это дает мне «индекс вне диапазона» ошибки. Скажите, пожалуйста, как решить эту проблему?

Большое спасибо Adia

+0

Хорошо, что делать, если столбцов недостаточно? – SilentGhost

ответ

1

использовать кусочек вместо индекса.

>>> with open('test.txt') as f_in: 
...  column3 = (line.split(';')[2:3] for line in f_in) 
...  column3 = [item[0] for item in column3 if item] 
... 
>>> column3 
[' Green', ' Orange', ' White', ' Green', ' White', ' Orange'] 
+0

+1: Имела в виду почти такую ​​же идею. – eldarerathis

2

, что о чем-то вроде этого:

cols = i.split(";") 
if (len(cols) >= 3): 
    lines = cols[2] 
else: 
    #whatever you want here 
2

Простым решением является проверка количества столбцов и игнорирование строк с менее чем тремя столбцами.

third_columns = [] 
with open("...") as infile: 
    for line in infile: 
     columns = line.split(';') 
     if len(columns) >= 3: 
      third_columns.append(columns[2]) 

А если разобрать CSV (кажется, что вы делаете), то лучше использовать один из многочисленных существующего CSV анализаторов, e.g. the one in the standard library.

0
for line in open("file"): 
    try: 
     s=line.split(";")[2] 
    except: pass 
    else: 
     print s 
+2

голые за исключением зла – SilentGhost

Смежные вопросы