Как сделать оператор if в пустом списке в python - PullRequest
1 голос
/ 16 апреля 2020

У меня небольшая проблема с созданием оператора if в python. Я собираю два CSV-файла, используя библиотеку Panda, и я хочу создать оператор if, который будет проверять, если список пуст. Так что это мой код

file1 = pd.read_csv('otomotofirst.csv')
file2 = pd.read_csv('otomotonew.csv')

change=(file2[~file2.Linki.isin(file1.Linki)])

if change is None:
    break
else:
    send_mail(subjectNew,change)

Он работает довольно хорошо, однако, если он пустой (или в моем случае нет), электронное письмо также отправляется. Конечно, он отправляет пустой список, но не ломается.

Я пытался сделать это с помощью операторов True и False, но эта ошибка всегда всплывает

ValueError: Значение истинности DataFrame неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

У вас нет списка, у вас есть DataFrame. Фреймы данных, даже пустые, не являются None.

pd.DataFrame() is None
False

Вы проверяете, пуст ли DataFrame с атрибутом empty.

pd.DataFrame().empty
True

Что касается ошибки, вы не можете рассматривать DataFrame как список для проверки пустоты

if []: print(True)              # Works 
if pd.DataFrame(): print(True)  # ValueError

Код должен быть

if change.empty:
    break
else:
    send_mail(subjectNew, change)
0 голосов
/ 16 апреля 2020

Вы можете использовать os.path.getsize(), чтобы получить размер файла. Итак, если вы хотите проверить, пустой ли ваш файл:

filesize = os.path.getsize("file.csv")
filesize1 = os.path.getsize("file1.csv")

def file_compare():
  if(filesize == 0 and filesize == 0):
      print("Both files are empty")
  if(filesize == filesize1):
      print("File sizes are equal", str(filesize)
  else:
      print(str(filesize))
      print(str(filesize1))`

Надеюсь, это сработает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...