如何使用逗号读取csv字段并将字段中的字符串拆分为列表?

时间:2019-03-20 21:31:45

标签: python

我正在尝试读取csv并将带有分隔符的某些输出字符串分成一个列表,但是当我尝试使用数组读取列表时,它抛出了错误,提示“列表索引超出范围”。该列表应包含2个元素。请参阅随附的代码。请,请帮助我指出代码出了什么问题。索引0可以正常工作。

csv文件如下所示: ID,全名,姓氏

1,约翰·史密斯(John Smith),“史密斯(Jonh)”

2,卡米尔·约翰逊,“约翰逊,卡米尔”

3,Bang Dong,“ Dong,Bang”

4,查尔斯·辛普森,“查尔斯·辛普森”

import csv
with open('testfile.csv', 'r', newline='') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        # print(row)
        # print (row[2])
        a = row[2].split(sep=", ")
        print(a[1])

Sample csv file

3 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

project
|_moduleA
  |_main
  |_test
|_moduleB
  |_main
  |_test

这会将csv文件读入数据框,您可以访问列并将其转换为如下列表:

import pandas as pd

df = pd.read_csv('testfile.csv')

答案 1 :(得分:0)

问题是您使用“,”作为分隔符,但“姓氏”列中也包含逗号。

在这一行代码中:

a = row[2].split(sep=", ")

您正在尝试将名字和姓氏分开,并假定它返回一个元组,您试图在此处显示该元组:     打印(a [1])

问题是一个将不是元组,因为此列中的逗号是。相反,将有一行[3],在您的情况下,“史密斯”将在第[2]行中,而“约翰”将在第[3]行中。 为避免这种情况,请使用其他定界符

答案 2 :(得分:0)

以与csv编码相同的方式使用pandas效果很好。谢谢纳撒尼尔。

  <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
tools:context=".Activities.LoadSavedCoffretDataActivity">


<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/white"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<ImageView
    android:id="@+id/cancel_img"
    android:layout_marginTop="?attr/actionBarSize"
    android:elevation="5dp"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:src="@drawable/cancel" />

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerview_id"
    android:layout_marginTop="?attr/actionBarSize"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal">

    <ImageView
        android:id="@+id/delete_img"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@drawable/ic_delete_forever_black_24dp"/>

</LinearLayout>