Как мне заставить Python добавить к файлу csv, который кто-то в данный момент открыл?

#python #pandas #python-2.7 #csv

#python #pandas #python-2.7 #csv

Вопрос:

Есть ли способ сделать это? Вот мой текущий код.

 try:
    if len(df) > 0:
        with open(r'\pathtodirIDS_'   str(now)[:-2]   '.csv', 'a') as f:
            df.to_csv(f, sep=',', header=False, index=True, encoding='utf-8')
            f.close()
except Exception, e:
    print e
  

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

1. Вам не нужно f.close() , для этого и есть with инструкция.

2. Я не думаю, что вы можете добавлять в файл, если кто-то его использует. Вы можете скопировать и добавить к копии.

3. В какой операционной системе вы работаете? Какую ошибку вы получаете? Пожалуйста, укажите шаги для воспроизведения вашей проблемы

4. Это просто код pseduo? Это кажется выполнимым. Попробуйте это и обновите сообщение, если у вас возникнут какие-либо проблемы

5. @NickTheInventor нет, он всегда будет закрывать документ, если вы используете with инструкцию . В этом весь смысл использования with инструкции здесь , если вы серьезно наблюдаете такое поведение, вам следует отправить отчет об ошибке как можно скорее

Ответ №1:

Я обнаружил, что не могу редактировать файл, который кто-то уже открыл. Что я могу сделать, так это обработать исключение с помощью cPickle, чтобы выгрузить новую информацию в файл pickle и загрузить ее, когда придет время поместить файл в csv в следующий раз.

 try:
    if len(df) > 0:
        with open(r'\pathtodirIDS_'   str(now)[:-2]   '.csv', 'a') as f:
            df.to_csv(f, sep=',', header=False, index=True, encoding='utf-8')
            f.close()
except Exception, e:
   cPickle.dump(df, open(r'C:missed rows.p','wb'))

missed_rows = cPickle.load(open(r'C:missed rows.p','rb'))

if len(missed_rows) > 0:
    df = missed_rows.append(df, sort=True)
    missed_rows = pd.DataFrame()
    cPickle.dump(missed_rows, open(r'C:missed rows.p','wb'))
    df = df.drop_duplicates()