Команда Python os.system cp копирует пустой файл

1

Каталог 1: У меня есть несколько файлов txt и один xml файл, который я хочу изменить на каждой итерации в соответствии с содержимым файла txt.

Directory 2: Я хочу скопировать измененный xml файл в этот каталог после каждой итерации.

После выполнения я могу наблюдать измененный xml файл в каталоге 1, который содержит последний контент файла txt, как и ожидалось. Однако каталог 2 содержит пустые файлы с ожидаемыми именами. Может быть, есть какая-то проблема в моей команде cp? Не могли бы вы помочь?

os.system('cp /home/username/xmlFile.xml /home/username/NewFolder/%s.xml' % myString)

Весь скрипт:

#!/usr/bin/python
import os
import re
from shutil import copyfile

arr = os.listdir('/di/rec/to/ry')
newArr = []
for j in arr:
        m = re.search('.*txt', j)
        if m != None:
                newArr.append(m.group(0))
for i in newArr:
        myString = ""
        f = open('/home/username/xmlFile.xml', 'r+')
        i = i[:-4]
        data = f.readlines()
        myString += str(i)
        data[10] = data[10][:36] + i + data[10][64:]
        f.truncate(0)
        f.seek(0)
        f.writelines(data)
        #os.system('cp /home/username/xmlFile.xml /home/username/NewFolder/%s.xml' % myString)
        copyfile('/home/username/xmlFile.xml', '/home/username/NewFolder/%s.xml' % myString)
  • 0
    пожалуйста, опубликуйте все содержимое файла Python и что за ошибки вы получили?
  • 0
    Вы проверяли возвращаемое значение из os.system() ? Почему вы используете внешнюю программу для копирования файла вместо стандартной библиотеки Python?
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Вероятно, вы столкнулись с проблемами синхронизации. Файлы не сразу записываются на диск, а буферизируются в памяти, чтобы увеличить общую пропускную способность. Это означает, что в вызове copyfile не copyfile последние изменения, внесенные вами в файлы. Попробуйте вызвать f.flush() перед copyfile чтобы убедиться, что изменения зафиксированы на диске.

  • 0
    Это действительно помогло, большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню