从csv文件中切片行

时间:2018-01-24 13:43:00

标签: python csv

我正在尝试在python中读取csv文件并从中构建数据框。 以下是我的csv文件中的一行示例:

| ab / 5(cd ef 6 | text1 / 123(lala | ghj)lal / 1234/567 |

我想切片行并将每个元素分配给一列。 该行应该看起来像数据框一样:

col1 |  col2                     | col3
ab/5 | (cd ef 6| text1/123 (lala | ghj)

在excel中打开文件时设置分发服务器毫无意义,因为有时候“|”出现在原地,在这种情况下不应拆分。 对于第一个元素ab / 5,我试图这样做:

with open('actions2.csv', 'r') as csvfile_actions2:
    reader = csv.reader(csvfile_actions2)
    for row in reader:
        row2=row[0:23].split('|')
        print(row2)

但是,发生错误:

AttributeError: 'list' object has no attribute 'split'

有没有人知道如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这是实施拆分的错误方法。

你在阅读csv时应该进行“单元格”解析,而不是之后。对于python Xamarin.Forms模块,方言支持custom delimiters。所以,你可以做到

var k: [Any] = [2,5,"Hello"]
var dict2: [String : Any] = [:]
dict2   = ["arr" :  k ]
let arr = dict2["arr"] as! Array<Any>
print(arr[0])

csv将为您完成所有解析和拆分,您将遍历已解析的列表

在文档中查找更多examples and recipes

答案 1 :(得分:1)

如果您打算手动分隔,则无需使用csv.reader功能。您可以改为使用open并在第一个“|”实例中拆分该行如下图所示:

with open('actions2.csv', 'r') as csvfile_actions2:
    for row in csvfile_actions2:
        row2 = row[0:23].split('|',1)
        print(row2)

split('|',1)函数只会在第一个'|'处拆分字符串字符。如果您要删除空格,也可以在.replace(' ','')之前添加split

或者,如果你的csv文件只有3列而且额外的'|'字符只出现在第2列中,如示例所示,然后您可以在使用csv.reader

后重新组合它们
with open('actions2.csv', 'r') as csvfile_actions2:
    reader = csv.reader(csvfile_actions2, delimiter='|')
    for row in reader:
        if len(row) == 4:
            row = [row[0], row[1] + '|' + row[2], row[3]]

答案 2 :(得分:0)

试试这个: -

with open('actions2.csv') as f:
    content = f.read()
    comp_list = content.split("\n")[0:23]
    for i in comp_list:
        new_list = i.split("|")
        print (new_list)