Сортировка текстового файла по первому столбцу и повторение счетчика python

У меня есть текстовый файл, который нужно отсортировать по первому столбцу и объединить все повторы со счетчиком слева от данных, а затем записать отсортированные / подсчитанные данные в уже созданный файл csv.

Текстовый файл:

, 00.000.00.000, word, 00 , 00.000.00.001, word, 00 , 00.000.00.002, word, 00 , 00.000.00.000, word, 00 , 00.000.00.002, word, 00 , 00.000.00.000, word, 00 

Результат:

 , 3, 00.000.00.000, word, 00 , 1, 00.000.00.001, word, 00 , 2, 00.000.00.002, word, 00 

Мой код:

 for ip in open("list.txt"): with open(ip.strip()+".txt", "a") as ip_file: for line in open("data.txt"): new_line = line.split(" ") if "blocked" in new_line: if "src="+ip.strip() in new_line: ip_file.write(", " + new_line[11]) ip_file.write(", " + new_line[12]) ip_file.write(", " + new_line[13]) for ip_file in os.listdir(sub_dir): with open(os.path.join(sub_dir, ip_file), "a") as f: data = f.readlines() data.sort(key = lambda l: float(l.split()[0]), reverse = True) 

Всякий раз, когда я проверяю код, я получаю ошибку TypeError: 'str' object is not callable или что-то подобное. Я не могу использовать .split() .read() .strip() т.д., не получив ошибку.

Вопрос : Как я могу сортировать содержимое файлов и подсчитывать повторяющиеся строки (без определения функции)?

Я в основном пытаюсь:

 sort -k1 | uniq -c | sed 's/^/,/' >> test.csv 

3 Solutions collect form web for “Сортировка текстового файла по первому столбцу и повторение счетчика python”

 D = {} for k in open('data.txt'): #use dictionary to count and filter duplicate lines if k in D: D[k] += 1 #increase k by one if already seen. else: D[k] = 1 #initialize key with one if seen for first time. for sk in sorted(D): #sort keys print(',', D[sk], sk.rstrip(), file=open('test.csv', 'a')) #print a comma, followed by number of lines plus line. #Output , 3, 00.000.00.000, word, 00 , 1, 00.000.00.001, word, 00 , 2, 00.000.00.002, word, 00 

Как насчет этого:

 input = ''', 00.000.00.000, word, 00 , 00.000.00.001, word, 00 , 00.000.00.002, word, 00 , 00.000.00.000, word, 00 , 00.000.00.002, word, 00 , 00.000.00.000, word, 00'''.split('\n') input.sort(key=lambda line: line.split(',')[1]) for key, values in itertools.groupby(input, lambda line: line.split(',')[1]): values = list(values) print ', %d%s' % (len(values), values[0]) 

Этого не хватает для проверки ошибок (например, непригодных строк и т. Д.), Но, возможно, вы можете добавить это самостоятельно в соответствии с вашими потребностями. Кроме того, split выполняется дважды; один раз для сортировки и один раз для группировки. Вероятно, это можно улучшить.

Я бы подумал об использовании модуля обработки данных Pandas

 import pandas as pd my_data = pd.read_csv("C:\Where My Data Lives\Data.txt", header=None) sorted_data = my_data.sort_index(by=[1], ascending=1) # sort my data sorted_data = sorted_data.drop_duplicates([1]) # leaves only unique values, sorted in order counted_data = list(my_data.groupby(1).size()) #counts the unique values in data, coverts to a list sorted_data[0] = counted_data # inserts the list into your data frame 
  • Как работают operator.itemgetter и sort () в Python?
  • Как сортировать Python dict по значению
  • Django / Python: Сортировка словарей python с ключом equals
  • Сортировка элементов словаря в списке
  • Pandas сортировать по совокупности групп и столбцам
  • Python quicksort - просмотр списка vs Recursion (подпрограмма)
  • Как отсортировать словарь по значению?
  • Сохранение записей словаря Python в том порядке, в котором они нажаты
  • Python - лучший язык программирования в мире.