2016-05-26 3 views
0

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

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

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) 

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

Спасибо!

+++++ +++++ EDIT

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

Последнее, что я могу добавить в индекс первой строки, например, «Number» , а затем из второй строки запустите run_number_in_csv.

Благодаря

+0

Что такое 'файлы'? Как 'range (0,1)' (который только 0) открывает 3 файла? Кроме того, ваши заявления 'print' после' return' и поэтому никогда ничего не печатают. Именование файла 'file' - встроенный python - не является хорошей практикой. Существует ряд проблем, но недостаточно информации, чтобы указать вам в правильном направлении в настоящее время. – roganjosh

+0

Я в процессе написания более подробного ответа на этот вопрос, поскольку я рассмотрел ваши предыдущие вопросы. Предыдущие вопросы, скорее всего, должны были быть закрыты, но это не означает, что вы не получаете ответа, а ваш основной вопрос (непонимание функций) продолжает возникать. Если вы хотите ответить на мои комментарии, пожалуйста, сделайте это «добавьте комментарий» и напишите мне «@roganjosh» и, пожалуйста, не отвечайте на ответы, написав новый ответ. Никто не увидит его, и он загромождает формат сайта. – roganjosh

ответ

0

Рассматривая предыдущие оставшиеся вопросы, общая тема является фундаментальной проблемой с пониманием того, как использовать функции в 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 :) 
0

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

file1 1 до 400

file2 401 до 641

файл 3

642 - 742

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

+0

Как я уже сказал в своем комментарии, пожалуйста, не отвечайте на мои комментарии, написав ответ. Кроме того, это не устранит ваше недоразумение. Я все равно напишу свой ответ, чтобы попытаться остановить вас с аналогичными проблемами в будущем. – roganjosh

Смежные вопросы