2012-01-13 3 views
1

Я новичок в Python, и я только программировал на этом языке на третий день. Я конвертирую из Matlab, потому что я окончил университет, и я просто не могу позволить себе большую стоимость программного обеспечения.Основы пустого списка в Python

Я пытаюсь добавить несколько имен файлов в список, который терпит неудачу. Ниже мой код:

import os 
    dirname = r"D:\MyFiles" 
    temp = os.listdir(dirname) 
    fl = [] 
    for fn in temp: 
     if fn.startswith('L0116'): 
      fl = fl.append(fn) 

То, что я не понимаю, переменная фл, когда инициируется с помощью [] возвращает как тип списка, но тогда я не добавить список с указанным контуром. Я перепроверяю свой код с помощью интерактивного приглашения, и я узнал, что тип изменяется на str и не может добавить больше.

Я застрял в этом, и я попытался обратиться в Google около часа, не имея четкого представления о том, как я должен это делать.

Есть ли лучший способ? Или в какой части я делаю это неправильно?

Большое вам спасибо за помощь!

ответ

2

Метод append() изменяет список на месте. Вы должны просто добавить fn так:

fl.append(fn) 

не пытаются присвоить результат fl.append(fn) (который None, кстати)

Кроме того, не используйте r"foo" строки для имен файлов. Они предназначены для использования с регулярными выражениями, и использование их для имен файлов или других типов строк укусит вас. Например, вы не можете закончить такую ​​строку обратным слэшем.

+0

Спасибо! Концепт-проблема ведь. –

+0

Однако, если я не добавляю r впереди, функция listdir будет читать символ после '\' и отображать ошибки. Есть ли способ обойти это? –

+1

Используйте '' D: \\ MyFiles''. Да, уродство должно удваивать каждый разделитель пути. Учитывая, что обратная косая черта использовалась в качестве символа escape-последовательности в течение многих десятилетий, было очень плохое решение использовать его также как разделитель пути. Но теперь вы застряли, если застряли в MS Windows. – Celada

2

append работает Inplace, поэтому нет необходимости назначать его в сам список (fl = fl.append(fn)) просто сделать fl.append(fn)

+0

большое спасибо! –

0

Список добавить в питоне не возвращает тип, вместо этого, вы просто вызвать метод следующим образом:

import os 
dirname = r"D:\MyFiles" 
temp = os.listdir(dirname) 
fl = [] 
for fn in temp: 
    if fn.startswith('L0116'): 
     fl.append(fn) 

Я не тестировал этот код, но он должен работать. Ваша логика сбрасывала список каждый раз.

+0

большое спасибо! –

2

Список понимание:

import os 
dirname = r"D:\MyFiles" 
fl = [fn for fn in os.listdir(dirname) if fn.startswith('L0116')] 
Смежные вопросы