Python - 读取CSV,不会打印最后一列

时间:2016-01-27 21:12:50

标签: python csv

我对Python很陌生,并整理了一个脚本来解析csv并最终将其数据输出到重复的html表中。

我的大部分都在工作,但是我还有一个奇怪的问题我无法修复。我的脚本将找到最后一列的索引,但不会打印出该列中的数据。如果我在末尾添加另一列,即使是空列,它也会打印出前一列中的数据 - 因此该列的内容不会出现问题。

代码的简陋(但仍然脾气暴躁)版本:

import os
os.chdir('C:\\Python34\\andrea')

import csv
csvOpen = open('my.csv')
exampleReader = csv.reader(csvOpen)
tableHeader = next(exampleReader)

if 'phone' in tableHeader:
    phoneIndex = tableHeader.index('phone')
else:
    phoneIndex = -1

for row in exampleReader:
    row[-1] =''
    print(phoneIndex)
    print(row[phoneIndex])
csvOpen.close()

my.csv

    stuff,phone
    1,3235556177
    1,3235556170

输出

    1

    1

相同的脚本,对CSV文件的小改动:

my.csv

    stuff,phone,more
    1,3235556177,
    1,3235556170,

输出

    1
    3235556177
    1
    3235556170

我通过Idle 3.4.3使用Python 3.4.3

我在mysql直接生成的CSV中遇到了同样的问题,我先在Excel中打开然后重新保存为CSV的CSV,以及我在Notepad ++中编辑过的那些保存为CSV。

我尝试在open函数(r,rU,b等)中添加了几种不同的模式,并且它没有任何区别或给了我一个错误(例如,它没有' b& #39;)

我的解决方法只是在末尾添加一个额外的列,但由于这是一个经常使用的脚本,如果它正常工作,它会好得多。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

  row[-1] =''

CSV阅读器会返回一个表示文件中行的列表。在此行中,您将列表中的最后一个值设置为空字符串。然后你打印它。如果您不希望将最后一列设置为空字符串,请删除此行。

答案 1 :(得分:0)

如果您知道它是最后一列,您可以对它们进行计数,然后使用该值减去1.同样,如果您知道它将永远是"电话",您可以使用字符串比较方法。我建议如果您使用字符串比较,将csv中的值转换为小写,这样您就不必担心大小写。

在下面的代码中,我创建了一些函数,展示了如何使用这两种方法。

import os
import csv

os.chdir('C:\\temp')

csvOpen = open('my.csv')
exampleReader = csv.reader(csvOpen)
tableHeader = next(exampleReader)
phoneColIndex = None;#init to a value that can imply state
lastColIndex = None;#init to a value that can imply state

def getPhoneIndex(header):
    for i, col in enumerate(header): #use this syntax to get index of item
        if col.lower() == 'phone':
            return i;
    return -1; #send back invalid index

def findLastColIndex(header):
    return len(tableHeader) - 1;


#@ methods to check for phone col. 1. by string comparison 
#and 2. by assuming it's the last col.
if len(tableHeader) > 1:# if only one row or less, why go any further?
    phoneColIndex = getPhoneIndex(tableHeader);
    lastColIndex = findLastColIndex(tableHeader)


for row in exampleReader:
    print(row[phoneColIndex])
    print('----------')
    print(row[lastColIndex])
    print('----------')
csvOpen.close()