0
我有一個以逗號分隔的文件(來自第三方),其中每行以空格開頭和結尾,字段用雙引號引起來,文件以僅包含一行的結尾空間。以前導空格開始讀取csv
"first_name";"last_name"
"John";"Doe"
"Anita";"Doe"
我試着用下面的代碼閱讀它。
import csv
import json
def read_csv(filename):
result = []
with open(filename, 'r', encoding='utf-8') as f:
csv_reader = csv.reader(f, delimiter=';', quotechar='"')
for line_index, line in enumerate(csv_reader):
if line_index == 0:
header = line
continue
result.append(dict(zip(header, line)))
return result
if __name__ == '__main__':
contents = read_csv('test.txt')
print(json.dumps(contents, indent=4, sort_keys=4))
這是我期望的結果:
[
{
"first_name": "John",
"last_name ": "Doe "
},
{
"first_name": "Anita",
"last_name ": "Doe "
}
]
然而,它始終把雙引號作爲第一列的一部分,由於前導空格,再加上它採取最後一行也考慮在內。這是結果我得到:
[
{
" \"first_name\"": " \"John\"",
"last_name ": "Doe "
},
{
" \"first_name\"": " \"Anita\"",
"last_name ": "Doe "
},
{
" \"first_name\"": " "
}
]
如何才能擺脫前的CSV解析這些開頭和結尾的空格的?答案here顯示了在讀取字段後如何從字段中刪除空格,但這在這裏不太好,因爲它不是我想要更改的字段的內容,而是字段本身。
順便說一句:我正在使用Python 3.5。
編輯
我跳過空行現在使用下面的代碼:
# Skip empty lines
line = [column.strip() for column in line]
if not any(line):
continue
謝謝,這已經與領域內的雙引號幫助。儘管如此,它仍然給了我第三個元素,它帶有'first_name =「」'和'last_name = None'。 – physicalattraction
@physicalattraction無法重現與您的示例數據...... –
這可能是因爲SO刪除了我的CSV樣本的最後一行,除了空格,這是空的。 – physicalattraction