Вывод списка пустых индексов столбца в текстовом / csv-файле с разделителями табуляции с использованием split в python - PullRequest
0 голосов
/ 16 мая 2018

У меня есть CSV-файл с 5 столбцами и тремя строками.Столбцы разделены табуляцией, а строки разделены новыми строками.Некоторые элементы пусты.Я должен найти столбцы, которые пусты для всех строк.Файл здесь:

образец таблицы

Мой код указан ниже.Проблема в том, что он не работает для последнего столбца, т. Е. Если последний столбец пуст или в последнем столбце после последней вкладки в строке нет значения, он все равно считается непустой строкой.Я проверил длину «eachElement» и, как ни странно, длина показывает 1 для 1-й и 2-й строки, но показывает пустую строку для 3-й строки.Похоже, что он подсчитывает новую строку после последней вкладки в последнем столбце для первых двух строк (отсюда длина 1), но логически это не должно происходить, потому что я использовал «для строки в содержимом».Таким образом, каждая строка должна содержать только эту строку без "\ n"

import sys
import array

rowIndex = -1
countEmptyCol = array.array('i',(0 for i in range(0,5)))    #this creates an unsigned int array of 58 elements and assigns 0 for each
listEmptyColumns = []   #contains index of columns that are empty for all records

#Get number of empty values for each columns in the array
with open("D:\TU Ilmenau\L1T2\Labs\DDM\Python\database.csv", "r", 1) as file:
    content = file.readlines()
    for line in content:
        rowIndex += 1
        colIndex = -1
        for eachElement in line.split("\t"):
            colIndex += 1
            if not eachElement:
                #increases the value of index by 1
                countEmptyCol.insert(colIndex, countEmptyCol.pop(colIndex) + 1)

numOfRows = rowIndex + 1

#Compare if number of empty values for each column is equal to the number of total rows
for idx, val in enumerate(countEmptyCol):
    if val == numOfRows:
        listEmptyColumns.append(idx)
print listEmptyColumns

1 Ответ

0 голосов
/ 16 мая 2018

line включает новую строку \n в конце. Избавьтесь от этого в вашем for цикле:

for line in content:
    line = line.rstrip('\n')
    rowIndex += 1
    colIndex = -1
    ...

Я попробовал это, и оно работает.

...