第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用 DictReader 從 python 中的 csv 行“作為列表”讀取列表

使用 DictReader 從 python 中的 csv 行“作為列表”讀取列表

我的 CSV 文件如下所示:    id,name,list    1,Beans,[1,2,3]    2,Spam,[5,6,7]    5,Spam,[7,8,9]當(dāng)我嘗試使用以下代碼閱讀最后一列時(shí):with open('some.csv', newline='') as csvfile:     reader = csv.DictReader(csvfile)     for row in reader:         print(row["list"])我得到的輸出是:[1[5[7顯然,它在第一個(gè) ',' 處分隔列表。但是我希望它將整個(gè)列表作為一列來(lái)閱讀。所以我的預(yù)期輸出是:[1,2,3][5,6,7][7,8,9]我計(jì)劃將這些中的每一個(gè)存儲(chǔ)在變量中,以便它們可以像我使用普通列表迭代它或執(zhí)行其他任務(wù)一樣使用。我如何實(shí)現(xiàn)這一目標(biāo)?
查看完整描述

4 回答

?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

  • 問(wèn)題是 CSV 格式不正確,列表周圍用雙引號(hào)引起來(lái)

    • list是 python 數(shù)據(jù)類型,所以它不應(yīng)該用作變量名。

    • lists通過(guò)將列用雙引號(hào)?引起來(lái)修復(fù) CSV 文件

  • 使用此解決方案pandas

    • ast.literal_eval將字符串評(píng)估回列表

import pandas as pd

from ast import literal_eval


# fix the csv file by wrapping the list with quotes

with open('test.csv', 'r+', newline='') as f:

? ? rows = [s.replace(',[', ',"[').replace(']', ']"').strip() for s in f.readlines()]

? ? f.seek(0)

? ? f.truncate()

? ? f.writelines(s + '\n' for s in rows)



# read the csv and evaluate the list column as lists

df = pd.read_csv('test.csv', converters={'lists': literal_eval})


# display(df)

? ?id? ?name? ? ? lists

0? ?1? Beans? [1, 2, 3]

1? ?2? ?Spam? [5, 6, 7]

2? ?5? ?Spam? [7, 8, 9]

3? ?6? Steak? ? ? ? ?[]


print(type(df.loc[0, 'lists']))

[out]:

list

with open

# converts

id,name,lists

1,Beans,[1,2,3]

2,Spam,[5,6,7]

5,Spam,[7,8,9]

6,Steak,[]


# into

id,name,lists

1,Beans,"[1,2,3]"

2,Spam,"[5,6,7]"

5,Spam,"[7,8,9]"

6,Steak,"[]"


查看完整回答
反對(duì) 回復(fù) 2023-05-16
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果您無(wú)法更改輸入文件,您仍然可以使用以下代碼處理列表列 -


with open('test.csv', newline='') as csvfile:

    reader = csv.DictReader(csvfile)

    stringVal = ","

    for row in reader:

        newList = row['list'] + "," + stringVal.join(row[None])

        print(newList)



查看完整回答
反對(duì) 回復(fù) 2023-05-16
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以像這樣引用您的 csv 文件:


"id","name","list"

"1","Beans","[1,2,3]"

"2","Spam","[5,6,7]"

"5","Spam","[7,8,9]"

然后您可以使用csv帶有可選參數(shù)的模塊來(lái)讀取它quoting=csv.QUOTE_ALL。在此之后,您可以將這些“字符串列表”轉(zhuǎn)換為常規(guī)列表。例如,如果這些“字符串列表”只是數(shù)字,那么您可以過(guò)濾結(jié)果,然后將其轉(zhuǎn)換為整數(shù)。這是代碼:


import csv


with open('test.csv', 'r') as fh:

    data = list(csv.reader(fh, quoting=csv.QUOTE_ALL))

    for i in range(1, 4):

      data[i][2] = list(filter(lambda c: str.isnumeric(c), data[i][2]))

      data[i][2] = list(map(lambda c: int(c), data[i][2]))

    print(*data, sep='\n')

結(jié)果:


['id', 'name', 'list']

['1', 'Beans', [1, 2, 3]]

['2', 'Spam', [5, 6, 7]]

['5', 'Spam', [7, 8, 9]]


查看完整回答
反對(duì) 回復(fù) 2023-05-16
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

問(wèn)題與您的 csv 文件有關(guān)。如果那是實(shí)際文件的樣子,那么它將按照您說(shuō)的那樣進(jìn)行。將列表用雙引號(hào)括起來(lái),如下所示:


    id,name,list

    1,Beans,"[1,2,3]"

    2,Spam,"[5,6,7]"

    5,Spam,"[7,8,9]"


查看完整回答
反對(duì) 回復(fù) 2023-05-16
  • 4 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)