подсчет числа с 3 csvs python

У меня есть 3 csv, которые я хотел бы изменить один столбец на рабочий номер, который зависит от числа строк в файле.
Для exmaple файл 1 получил 400 строк, файл 2-240, а файл 3-100.
таким образом, добавленный столбец для файла 1 будет иметь номер от 1 до 400.
таким образом, добавленный столбец для файла 2 будет иметь номер от 401 до 640.
таким образом, добавленный столбец для файла 3 будет иметь номер от 641 до 741.

то, что я написал это

file1 = str(path) + "file1"
file2 = str(path) + "file2"
file3 = str(path) + "file3"
files = [file1, file2, file3]


class File_Editor():
    def line_len(self):
        for k in range(0,2):
            file_name = open(files[k] + ".csv")
            numline = len(file_name.readlines())
            print (numline)

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

Большое Спасибо!

+++++РЕДАКТИРОВАТЬ+++++

@roganjosh спасибо много, я использовал ваш код с немного фиксированной для running_number = 1, я поставил его внутри def, что оба файла будут иметь один и тот же рабочий номер.

Последнее, как я могу добавить индекс первой строки ,например, » номер»
а затем из 2-й строки запустите running_number_in_csv.

Спасибо

2 ответа

  1. @roganjosh я исправил свой код.
    Я знаю, какова длина файла, теперь мне нужно добавить столбец с запущенными номерами, такими как:

    file1
    1 до 400

    file2
    401 — 641

    файл 3

    642-742

    Большое спасибо!

  2. Глядя на ваши предыдущие вопросы, которые остаются открытыми, общая тема является фундаментальной проблемой с пониманием того, как использовать функции в Python, которые не рассматриваются. Я постараюсь отцепить часть этого, чтобы избежать подобных вопросов. Я предполагаю, что вы пришли из научной среды, как я, поэтому я буду придерживаться этого.

    Вы никогда не передаете аргументы только своим функциям self. Вместо этого вы пытаетесь ссылаться на глобалы из функции, но в этом нет необходимости, и это сбивает с толку. Например, у меня может быть уравнениеy = x^2 + 3x + 5, которое одновременно является математической функцией и может быть функцией python.

    def quadratic(value_of_x):
        y = (value_of_x **2) + (3*value_of_x) + 5
        return y
    
    eg_1 = quadratic(5)
    print (eg_1)
    eg_2 = quadratic(3)
    print (eg_2)
    
    # But this will fail
    #print (y)
    

    y существует только в пределах функции Python как локальная переменная и уничтожается после выхода из def / returnблока. В этом случаеeg_1, eg_2примите значение yв конце функции и value_of_xпринимает значение , которое я заключил в скобки на вызове функции (аргумент/переменная). В этом суть функций, их можно использовать снова и снова.

    Я также могу передать функции несколько аргументов.

    def new_quadratic(value_of_x, coefficient):
        y = coefficient*(value_of_x **2) + (3*value_of_x) + 5
        return y
    
    eg_3 = new_quadratic(5, 2)
    print (eg_3)
    

    Я не только не могу получить значение yвне области действия функции, но функция ничего не делает, если она не вызвана. Это равносильно тому, чтобы знать формулу в своей голове, но никогда не прогонять через нее число — вы просто определяете его как то, что может использовать ваш сценарий.

    starting_number = 5
    
    def modify_starting_number(starting_number):
        starting_number = starting_number * 2
        return starting_number
    
    print (starting_number)
    

    В то время как это делает то, что вы ожидали. Вы вызываете функцию, т. е. передаете число через формулу.

    starting_number = 5
    
    def modify_starting_num(starting_num):
        starting_num = starting_num * 2
        return starting_num
    
    starting_number = modify_starting_num(starting_number) # Calling the function
    print (starting_number)
    

    С этим из пути, к вашему вопросу.

    import csv
    
    files = ['file_1', 'file_2']
    
    def running_number_in_csv(filename_list):
        """ running_number resets every time the function is called, but is 
        remembered within the function itself"""
        running_number = 1 
    
        for individual_file in filename_list:
            new_rows = [] # Make something to hold row + extra column
    
            # Read contents of each row and append the running number to the list
            with open(individual_file + '.csv', 'r') as infile:
                 reader = csv.reader(infile)
                 for row in reader:
                     row.append(running_number)
                     new_rows.append(row)
                     running_number += 1 # Increments every row, regardless of file name number
    
            # Write the list containing the extra column for running number
            with open(individual_file + '.csv', 'w') as outfile: # Might need 'wb' in Windows
                writer = csv.writer(outfile)
                writer.writerows(new_rows)
    
    get_running_number = running_number_in_csv(files) # CALL THE FUNCTION :)