создайте файл, если не существует, если существует, не перезаписывайте значения - PullRequest
2 голосов
/ 04 мая 2020

Я хотел бы сделать следующее:

  1. Создать test.csv, если его не существует
  2. Запишите в него некоторые значения (см. Код)
  3. Объедините test.csv с data.csv и сохраните как test.csv
  4. Запустите тот же сценарий, но имена файлов будут изменены / заменены (data.csv на data2.csv)
  5. Создать test.csv, если он не существует (теперь он существует)
  6. Запишите в него некоторые значения (см. код), но не перезаписывайте текущие значения в данных, просто добавьте их

Вот мой код:

    #create a file if does not exist
    import numpy as np
    import pandas as pd
    myseries=pd.Series(np.random.randn(5))
    os.chdir(r"G:\..")
    file = open('test.csv', 'a+')
    df = pd.DataFrame(myseries, columns=['values'])
    df.to_csv("test.csv" , index=False)
    -----------------
    # merge with data.csv
    -------------
    # create a file if does not exist, if exist write new values without overwritting the existing ones    
    myseries=pd.Series(np.random.randn(5))
    os.chdir(r"G:\..")
    file = open('test.csv', 'a+')
    df = pd.DataFrame(myseries, columns=['values'])
    df.to_csv("test.csv" , index=False)
    # the values after merge were deleted and replaced with the new data

Я пробовал a, a +, w, w +, но текущие данные в файле были заменены новыми. Как можно определить, что новые данные записываются в CSV без удаления текущих данных?

1 Ответ

1 голос
/ 04 мая 2020

df.to_csv() не заботится о режиме, в котором файл открывается с помощью open(), и все равно перезапишет файл. Вместо того, чтобы добавлять строки в конец существующего файла CSV, вы можете использовать метод file.wite().

# For concatenation, remove the headers or they will show up as a row
contents = df.to_csv(index = False, header=False)
file = open("test.csv",'a')
file.write(contents)
file.close()

Или вы можете прочитать, объединить и переписать файл

test = pd.read_csv('test.csv')
test = pd.concat([test, df])
test.to_csv('test.csv',index=False)

Чтобы добавить столбцы, вы можете установить ось на 1.

test = pd.read_csv('test.csv')
test = pd.concat([test, df], axis=1)
test.to_csv('test.csv',index=False)
...