Как мы можем перебирать текстовые файлы в папке, копировать первые 2 строки в каждом файле и транспонировать результаты?

#python #python-3.x #transpose

#python #python-3.x #транспонировать

Вопрос:

У меня около 3000 текстовых файлов в папке. Я хочу выполнить итерацию по каждому из них, получить имя каждого файла, затем скопировать первые две строки, выполнить транспонирование и вставить следующие результаты в предыдущие результаты?

В одном файле есть поля, которые выглядят следующим образом.

 IDRSSD   RIAD0497                           RIAD4042                                RIAD4136            RIAD4141                    RIAD4146                               RIAD4461
         ADVERTISING amp; MARKETING EXPENSES   RENT amp; OTHER INCOME FR OTHR REAL EST    DIRECTORS FEES      LEGAL FEES amp; EXPENSES       FDIC DEPOSIT INSURANCE ASSESSMENTS     1ST ITEMIZED AMT OV25% OF ITEM 4078
 

Я хочу преобразовать это в это.

 file                                                                code        field
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   IDRSSD  
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD0497    ADVERTISING amp; MARKETING EXPENSES
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD4042    RENT amp; OTHER INCOME FR OTHR REAL EST
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD4136    DIRECTORS FEES
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD4141    LEGAL FEES amp; EXPENSES
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD4146    FDIC DEPOSIT INSURANCE ASSESSMENTS
C:UsersryansDownloadsFFIEC CDR Call Schedule RIE 03312001.txt   RIAD4461    1ST ITEMIZED AMT OV25% OF ITEM 4078
 

У меня есть пример кода, который копирует / вставляет первые две строки из каждого файла, но он не выполняет транспонирование. Я думаю, что окончательная версия кода будет выглядеть примерно так…

 ### mapping table for regulatory line items
import pandas as pd
import csv
import glob
import os

# Use a list here rather than a dataframe
results=[]
filelist = glob.glob("C:\Users\ryans\Downloads\*.txt")
number_of_lines = 2

for filename in filelist:
    with open(filename) as myfile:
        lines = myfile.readlines() # you can add strip() or other methods here
        file_lines = []
        print(file_lines)
        for line in lines[:2]:
            df = pd.DataFrame(lines[:2])
            transposed = df.T
            file_lines.append(transposed)
        results.append([filename, *file_lines])
        
# You can build a dataframe from that list at the end if you desire
results_df = pd.DataFrame.from_records(results, columns=['filename', 'file_lines_1', 'file_lines_2'])
 

Но здесь что-то не так. Похоже, это создает кучу пустых списков. Не уверен, что здесь происходит. Есть мысли о том, как я могу получить результаты, которые мне нужны? Спасибо.

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

1. для этого можно использовать dictionary и pandas?

Ответ №1:

 for filename in filelist:
    with open(filename) as myfile:
        lines = myfile.readlines() # you can add strip() or other methods here
        file_lines = []
        for line in lines[:2]:
            file_lines.append(line)
        results.append([filename, *file_lines])
 

number_of_lines = 2 < — это ненужная переменная

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

1. Спасибо за попытку помочь, AgentJRock, но это не переносит результаты. Он копирует и добавляет следующие записи под предыдущими записями. Я хочу транспонировать результаты или преобразовать результаты, как я показал на изображении.