Преобразовать CSV-файл в txt-файл

#python #pandas #csv

#python #панды #csv

Вопрос:

Я хочу преобразовать много CSV-файлов (для каждого CSV-файла мне просто нужны первые пять элементов первого столбца) в текстовый файл. А вот и мой код.

импортируйте pandas как pd import os

 for root, dirs, files in os.walk("./data_v6/level3/"):
    count = 1
    for dir in dirs:
        print(dir)
        count= count 1
        print(count)
        df = pd.read_csv('data_v6/level3/' dir '/tweets_topic.csv',usecols=[0])
        print(df.loc[0:4])
        #print(df)
        df.to_csv('data_v6/level3/topic_DIC.txt', header=None, index=None, sep=' ', mode='a')
 

Но это может не сработать. Я получил эту ошибку.

 File "F:/RUN/RUN/GetDictionary.py", line 11, in <module>
    print(df.loc[0:4])
  File "F:anacondalibsite-packagespandascoreindexing.py", line 879, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "F:anacondalibsite-packagespandascoreindexing.py", line 1088, in _getitem_axis
    return self._get_slice_axis(key, axis=axis)
  File "F:anacondalibsite-packagespandascoreindexing.py", line 1122, in _get_slice_axis
    indexer = labels.slice_indexer(
  File "F:anacondalibsite-packagespandascoreindexesbase.py", line 4966, in slice_indexer
    start_slice, end_slice = self.slice_locs(start, end, step=step, kind=kind)
  File "F:anacondalibsite-packagespandascoreindexesbase.py", line 5167, in slice_locs
    start_slice = self.get_slice_bound(start, "left", kind)
  File "F:anacondalibsite-packagespandascoreindexesbase.py", line 5079, in get_slice_bound
    label = self._maybe_cast_slice_bound(label, side, kind)
  File "F:anacondalibsite-packagespandascoreindexesbase.py", line 5031, in _maybe_cast_slice_bound
    self._invalid_indexer("slice", label)
  File "F:anacondalibsite-packagespandascoreindexesbase.py", line 3267, in _invalid_indexer
    raise TypeError(
TypeError: cannot do slice indexing on Index with these indexers [0] of type int
 

Комментарии:

1. Можете ли вы поделиться образцами входных / выходных данных?

2. я думаю, вам нужно использовать iloc вместо loc нарезки панд: pandas.pydata.org/pandas-docs/stable/reference/api /…

Ответ №1:

Вы пытаетесь использовать мощную перфораторную дрель там, где более уместной была бы простая отвертка. Pandas действительно очень мощная библиотека, которая прекрасно обрабатывает csv-файлы с автоматическим определением типа, но вам не нужно все это: вам нужны только 4 первых поля первого столбца.

Просто используйте модуль csv здесь:

 with open('data_v6/level3/topic_DIC.txt', 'a') as outfile:
    for root, dirs, files in os.walk("./data_v6/level3/"):
        count = 1
        for dir in dirs:
            print(dir)
            count= count 1
            print(count)
            with open('data_v6/level3/' dir '/tweets_topic.csv') as fd:
                rd = csv.reader(fd)
                try:
                    _ = next(rd)             # skip header line
                exception StopIteration:
                    print('data_v6/level3/' dir '/tweets_topic.csv is empty')
                    continue
                try:
                    for i in range(4):
                        try:
                            row = next(rd)
                            print(row[0], file=outfile)
                        except StopIteration:
                            break
 

Комментарии:

1. Спасибо тебе, брат. Я пробовал этот код, но он все равно не может работать.

2. SyntaxError: неожиданный EOF при синтаксическом анализе.

3. @Max: это синтаксическая ошибка в полном скрипте Python. Дважды проверьте отступы, кавычки и скобки…