سؤال

كلما أحاول فتح .ملف csv مع بيثون الأمر fread = open('input.csv', 'r') دائما يفتح الملف مع مسافات بين كل حرف.أعتقد أنه شيء خاطئ مع ملف النص لأنني أستطيع فتح الملفات النصية مع نفس الأمر يتم تحميلها بشكل صحيح.لا أحد يعرف لماذا ملف نصي تحميل مثل هذا الثعبان ؟

شكرا

التحديث

حسنا, لقد حصلت على ذلك مع مساعدة من جاريت هاردي بعد

هذا هو الكود الذي اعتدت أن تحويل الملف إلى ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

وذلك بفضل!

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

المحلول

وظيفة عن طريق العودية هو على الارجح صحيح...محتويات الملف من المرجح المشفرة مع multi-byte محارف.إذا كان هذا هو في الواقع حالة الأرجح يمكنك قراءة الملف في بيثون نفسها دون الحاجة إلى تحويله الأولى خارج بيثون.

محاولة شيء من هذا القبيل:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

في 'ب' العلم يضمن الملف قراءة البيانات الثنائية.سوف تحتاج إلى معرفة (أو تخمين) الترميز الأصلي...في هذا المثال ، لقد تستخدم utf-16 ، ولكن YMMV.هذا سيتم تحويل الملف إلى unicode.إذا كان لديك حقا الملف مع multi-byte حرف, أنا لا أوصي تحويله إلى ascii كما قد ينتهي المطاف إلى فقدان الكثير من الشخصيات في هذه العملية.

تحرير:شكرا على تحميل الملف.هناك نوعان من وحدات البايت في الجزء الأمامي من الملف الذي يشير إلى أنه لا, في الواقع, استخدام مجموعة واسعة محارف.إذا كنت غريبة ، فتح الملف في محرر عرافة كما اقترح البعض...سترى شيئا في نسخة نصية مثل 'الهوية|.' (الخ).النقطة الإضافية بايت لكل حرف.

مقتطف الشفرة أعلاه يبدو أن العمل على الجهاز الخاص بي مع هذا الملف.

نصائح أخرى

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

ليس csv بسيط ملف txt مع قيم مفصولة بفواصل.مجرد محاولة فتحه مع محرر النص لمعرفة ما إذا كان الملف بشكل صحيح تشكيلها.

لقراءة ترميز ملفات, يمكنك ببساطة استبدال open مع codecs.open.

fread = codecs.open('input.csv', 'r', 'utf-16')

لم لم ocurred لي, ولكن كما truppo وقال: يجب أن يكون هناك شيء خاطئ مع الملف.

محاولة فتح الملف في Excel/BrOffice احسب و حفظ الملف كملف Csv مرة أخرى.

إذا استمرت المشكلة, حاول مجموعة فرعية من البيانات:قبضة 10/الماضي 10/المتوسطة 10 أسطر من الملف.

حسنا, لقد حصلت على ذلك مع مساعدة من جاريت هاردي بعد

هذا هو الكود الذي اعتدت أن تحويل الملف إلى ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

وذلك بفضل!

فتح الملف في الوضع الثنائي, 'rb'.التحقق من ذلك في محرر عرافة والتحقق null الحشو '00'.فتح الملف في شيء مثل الشرارة محرر النص للتحقق من شخصيات موجودة في الملف.

هنا هو طريقة سريعة وسهلة, esp إذا الثعبان لن تحليل المدخلات بشكل صحيح

sed 's/ \(.\)/\1/g'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top