هنگام خواندن یک csv با کاما به دنبال فاصله در پایتون مراقب باشید

کسب و کار

در پایتون با استفاده از ماژول استاندارد 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']

در یک مثال ساده مانند مثال بالا، می توانید از strip() برای حذف فضای سفید استفاده کنید. مشکل زمانی است که با علامت های نقل قول دوتایی مانند زیر احاطه شده است.

"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)

Copied title and URL