سؤال

أريد أن أكتب نصًا (يفضل أن يكون بيثون) لتعديل محتوى ملف واحد في ملف TAR GZIDED. يجب تشغيل البرنامج النصي على FreeBSD 6+.

في الأساس ، أحتاج إلى:

  • افتح ملف القطران
  • إذا كان ملف TAR يحتوي على _my_file_ في ذلك:
    • إذا كان _my_file_ يحتوي على سطر مطابقة / إعادة / في ذلك:
    • أدخل الخط بعد خط المطابقة
  • أعد كتابة المحتوى في ملف القطر

سأكرر هذا لكثير من الملفات.

بيثون tarfile لا يبدو أن الوحدة قادرة على فتح ملفات القطران للوصول إلى القراءة/الكتابة عندما تكون مضغوطة ، مما يجعل قدرًا معينًا من المعنى. ومع ذلك ، لا يمكنني العثور على طريقة لنسخ ملف القطران مع التعديلات ، أيضًا.

هل هناك طريقة سهلة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

لا تفكر في ملف TAR كقاعدة بيانات يمكنك قراءتها/الكتابة - إنها ليست كذلك. ملف القطران هو تسلسل للملفات. لتعديل ملف في الوسط ، تحتاج إلى إعادة كتابة بقية الملف. (لملفات حجم معين ، قد تكون قادرًا على استغلال حشوة الكتلة)

ما تريد القيام به هو معالجة ملف Tarball حسب الملف ، ونسخ الملفات (مع التعديلات) في Tarball جديدة. يجب أن تجعل وحدة Python tarfile هذا سهلاً. يجب أن تكون قادرًا على الاحتفاظ بالسمات عن طريق نسخها من كائن Tarinfo القديم إلى الكائن الجديد.

نصائح أخرى

لا أرى طريقة سهلة لإزالة ملف واحد. يمكنك بسهولة استخراج واحدة أو كلها ، ثم إضافة أي ملفات مطلوبة.

أعتقد أن الطريقة الوحيدة هي:

  • افتح Tarfile باستخدام Python Tarfile ، أعد تسميته.
  • قم بإنشاء قطران فارغ مكرر لاسم الملف الأصلي
  • أعد إضافة جميع الملفات ، وتغيير الملف الذي تحتاجه قبل إعادة إضافة
  • تأكد من إعادة ضبط التنسيق الصحيح عند قراءته عند إعادة إنشاء

    tarfile.ustar_format posix.1-1988 (ustar) تنسيق. tarfile.gnu_format gnu tar format. tarfile.pax_format posix.1-2001 (pax) تنسيق. tarfile.default_format

http://docs.python.org/library/tarfile.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top