كن حذرًا عند قراءة ملف csv بفاصلة متبوعة بمسافة في Python

اعمال

في Python ، يمكنك بسهولة قراءة ملفات csv وكتابتها باستخدام وحدة csv القياسية.

على سبيل المثال ، افترض أن لديك ملف csv التالي ، sample.csv.

11,12,13,14
21,22,23,24
31,32,33,34

يمكن قراءة هذا على النحو التالي.

import csv

with open('data/src/sample.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']

ما تحتاج إلى توخي الحذر منه هنا هو عندما يكون هناك مسافة بعد الفاصلة. عادة ، يجب ألا تكون هناك مسافات غير ضرورية بعد الفاصلة ، لكن في بعض الأحيان أرى ملفات بها مسافات.

في مثل هذه الحالات ، بشكل افتراضي ، لا يتم تجاهل المسافة البيضاء ويتم قراءة الملف كما هو.

11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34

بمعنى آخر ، إذا قرأت الملف أعلاه بفاصلة متبوعة بمسافة ، فسيكون الإخراج على النحو التالي

with open('data/src/sample_space.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['11', ' 12', ' 13', ' 14']
# ['21', ' 22', ' 23', ' 24']
# ['31', ' 32', ' 33', ' 34']

إذا حددت ما يلي في csv.reader ، فسيتم تخطي المسافات بعد الفاصلة.
skipinitialspace=True

with open('data/src/sample_space.csv', 'r') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for row in reader:
        print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']

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

"one,one", "two,two", "three,three"

يجب اعتبار الجزء المحاط بعلامات اقتباس مزدوجة كعنصر واحد ، ولكن إذا كان skipinitialspace = False (الافتراضي) ، فسيبدو كما يلي.

with open('data/src/sample_double_quotation.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['one,one', ' "two', 'two"', ' "three', 'three"']

يمكن القيام بذلك عن طريق تعيين skipinitialspace = True.

with open('data/src/sample_double_quotation.csv', 'r') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for row in reader:
        print(row)
# ['one,one', 'two,two', 'three,three']

وينطبق الشيء نفسه عند قراءة ملف csv مع read_csv () في الباندا. إذا كان ملف csv به مسافة بعد الفاصلة ، فيمكنك القيام بما يلي.
read_csv(skipinitialspace=True)