2012-06-20 4 views
2

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

import csv 

file1 = open('C:/Users/Gallatin/Documents/adamenergy.csv',"r") #Open CSV File in Read Mode 
reader = csv.reader(file1)  #Create reader object which iterates over lines 

class Object:     #Object to store unique data 
    def __init__(self, name, produce, amount): 
    self.name = name 
    self.produce = produce 
    self.amount = amount 

rownum = 0 #Row Number currently iterating over 
list = [] #List to store objects 

def checkList(name, produce, amount): 


    for object in list: #Iterate through list   
    if object.name == name and object.produce == produce: #Check if name and produce combination exists 
     object.amount += int(amount) #If it does add to amount variable and break out 
     return 

newObject = Object(name, produce, int(amount)) #Create a new object with new name, produce, and amount 
list.append(newObject) #Add to list and break out 


    for row in reader: #Iterate through all the rows 
    if rownum == 0: #Store header row seperately to not get confused 
    header = row 
    else: 
    name = row[0] #Store name 
    produce = row[1] #Store produce 
    amount = row[2] #Store amount 

    if len(list) == 0: #Default case if list = 0 
     newObject = Object(name, produce, int(amount)) 
     list.append(newObject) 
    else: #If not... 
     checkList(name, produce, amount) 


rownum += 1 

for each in list: 
    print each.name,each.produce,each.amount 

С печатью она генерирует выходные я хочу правильно, но мне нужно, чтобы написать этот вывод в файл, так что я могу назвать это позже с помощью ndiff для сравнения с другим CSV файлом я пробегаю подобный код выше

Thanks

+0

Вы говорите, что в несколько раз _I нужно вызвать output_ и _I просто не может получить его в файл А может call later_ - что это значит - вызвать файл_? Это новый термин для меня. – sarnold

+0

Мне нужен выходной файл в новом файле.извините, но я знаю, что плохо делаю объяснение –

ответ

4

Существует несколько подходов, которые вы можете предпринять:

  1. Вы можете запускать программу по-разному; вместо бега:

    ./generate 
    

    выполнения

    ./generate > output_file.csv 
    

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

  2. Вы можете изменить вашу программу на write to a specific file. Откройте файл с чем-то вроде:

    output = open("output.csv", "w") 
    

    , а затем записать выходные, используя строки вдоль линий

    output.write(each.name + "," + str(each.produce) + "," + str(each.amount)) 
    
  3. Вы можете использовать тот же csv module to also write files. Это может быть лучшим подходом к долгосрочному использованию, поскольку он автоматически обрабатывает сложные случаи ввода, которые включают в себя , символов и другие сложные случаи.

+0

Я получаю это с помощью выбора 2 ---- Traceback (последний последний звонок): Файл «C:/Python27/Test2», строка 93, в output2.write (each.name + "," + each.produce + "," + each.amount) TypeError: не может объединить объекты 'str' и 'int' –

+0

@Adam: О, я беспокоюсь, я забываю, какие языки дружелюбны и номера автоматической строки в конкатенационных контекстах и ​​какие языки хотят, чтобы преобразование было явным. Обновлено. – sarnold

4

Просто перенаправить вывод в файл. Например,

C:> питон myfile.py> output.txt

2

В верхней части файла, откройте файл вывода:

outf = open("my_output_file.csv", "wb") 

потом:

print >>outf, each.name,each.produce,each.amount 
0

Просто используйте CSV писателю

add below code: 
csvWriter = csv.writer(open('csvFileSource.csv', 'wb'), delimiter=',', quotechar='|',quoting=csv.QUOTE_MINIMAL) 
     csvWriter.writerow(each.name + each.produce + each.amount) 

полный код:

import csv 

file1 = open('csvFileSource.csv',"r") #Open CSV File in Read Mode 
reader = csv.reader(file1)  #Create reader object which iterates over lines 

class Object:     #Object to store unique data 
    def __init__(self, name, produce, amount): 
     self.name = name 
     self.produce = produce 
     self.amount = amount 

rownum = 0 #Row Number currently iterating over 
list = [] #List to store objects 

def checkList(name, produce, amount): 
    for object in list: #Iterate through listif object.name == name and object.produce == produce: #Check if name and produce combination exists 
     object.amount += int(amount) #If it does add to amount variable and break out 
     return 

newObject = Object(name, produce, int(amount)) #Create a new object with new name, produce, and amount 
list.append(newObject) #Add to list and break out 

for row in reader: #Iterate through all the rows 
    if rownum == 0: #Store header row seperately to not get confused 
      header = row 
    else: 
     name = row[0] #Store name 
     produce = row[1] #Store produce 
     amount = row[2] #Store amount 

     if len(list) == 0: #Default case if list = 0 
      newObject = Object(name, produce, int(amount)) 
      list.append(newObject) 
     else: #If not... 
      checkList(name, produce, amount) 


rownum += 1 
csvWriter = csv.writer(open('csvFileDestination.csv', 'wb'), delimiter=',', quotechar='|',quoting=csv.QUOTE_MINIMAL) 
for each in list: 
    csvWriter.writerow(each.name + each.produce + each.amount) 
Смежные вопросы