2013-12-02 2 views
0

Я полный newb на этом, и у меня есть следующий скрипт. Он записывает некоторые случайные данные в .csv. Моя конечная цель - сохранить этот существующий .csv, но добавить ОДИН случайный сгенерированный datapoint в начало этого csv в отдельном скрипте Python.Как добавить точку данных к уже существующему .csv (с Python)?

Совершенно новый при этом - не уверен, как это сделать. Спасибо за вашу помощь.

output = [a,b] 

    d = csv.writer(csvfile, delimiter=',', quotechar='|', 

    quoting=csv.QUOTE_MINIMAL) 
    d.writerow(output) 
+0

примечание стороны вы можете изменить функцию ограничения на 'макс (мин (значение, max_value), min_value) 'также вы не можете делать то, что хотите, вам нужно будет прочитать весь CSV, добавьте свою ценность и выпишите весь ваш csv –

+1

Взгляните на [это] (http://stackoverflow.com/questions/5914627/append- line-to-start-of-a-file) ответ – RickyA

ответ

1

Вы уверены, что вы хотите добавить его в начало файла? Я чувствую, что вы хотите добавить его в конец, или если вы хотите добавить его в начале, вы, по крайней мере, захотите поместить его после строки заголовка, которая является ['name', 'value'].

В его нынешнем сценарии имеется несколько ошибок при попытке скомпилировать его, чтобы я мог немного помочь вам.

  1. Строка каталога не работает из-за косых черт. Он будет работать, если вы добавите r впереди (для необработанной строки), например r'C:/Users/AMB/Documents/Aptana Studio 3 Workspace/RAVE/RAVE/resources/csv/temperature.csv'
  2. Вам не нужен JSON для импорта json или ведения журнала, если это весь код.
  3. Внутри вашего цикла for вы переопределяете создателя температуры, который не нужен, ваше определение в начале достаточно хорошее.
  4. У вас есть лишняя запятая в вашей линии output = [timeperiod, temp,]

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

directory = r"C:/Users/AMB/Documents/Aptana Studio 3 Workspace/RAVE/RAVE/resources/csv/temperature.csv" 
with open(directory, 'r') as csvfile: 
    s = csvfile.readlines() 
time = 1 
value = 2 
s.insert(2, '%(time)d,%(value)d\n\n' % \ 
    {'time': time, "value": value}) 
with open(directory, 'w') as csvfile: 
    csvfile.writelines(s) 

Следующий раздел в ответ на ваш более подробный вопрос в комментариях:

import csv 
import random 

directory = r"C:\Users\snorwood\Desktop\temperature.csv" 

# Open the file 
with open(directory, 'r') as csvfile: 
    s = csvfile.readlines() 

# This array will store your data 
data = [] 

# This for loop converts the data read from the text file into integers values in your data set 
for i, point in enumerate(s[1:]): 
    seperatedPoint = point.strip("\n").split(",") 
    if len(seperatedPoint) == 2: 
     data.append([int(dataPoint) for dataPoint in seperatedPoint]) 

# Loop through your animation numberOfLoops times 
numberOfLoops = 100 
for i in range(numberOfLoops): 
    if len(data) == 0: 
     break 

    del data[0] # Deletes the first data point 
    newTime = data[len(data) - 1][0] + 1 # An int that is one higher than the current last time value 
    newRandomValue = 2 
    data.append([newTime, newRandomValue]) # Adds the new data point to the end of the array 

    # Insert your drawing code here 

# Write the data back into the text file 
with open(directory, 'w') as csvfile: #opens the file for writing 
    temperature = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) # The object that knows how to write to files 
    temperature.writerow(["name", "values"]) # Write the header row 
    for point in data: # Loop through the points stored in data 
     temperature.writerow(point) # Write current point in set 
+0

Если файл открыт дважды в разных режимах, это может вызвать проблемы. Вы должны использовать ['with'] (http://docs.python.org/3.3/whatsnew/2.6.html#pep-343-the-with-statement), чтобы гарантировать, что файлы закрыты должным образом, как в' с открытым (directory, 'r') как csvfile: ... 'then' with open (directory, 'w') как csvfile: ... ' – darthbith

+0

Я не пытался писать безопасный код, тем более, что у меня нет использовал синтаксис python через некоторое время, но все равно спасибо. Я отредактирую это. – Steven

+0

Файлы csv следует читать в двоичном режиме, поэтому 'mode' при первом вызове' open() 'должен быть' 'rb''. Для вставки новой второй строки необходимо использовать 's.insert (1, ...)'. Эта же строка имеет посторонний символ обратной косой черты после оператора '%'. – martineau

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