Poojith Chandra
Poojith Chandra

Reputation: 53

Reading and Writing into CSV file at the same time

I wanted to read some input from the csv file and then modify the input and replace it with the new value. For this purpose, I first read the value but then I'm stuck at this point as I want to modify all the values present in the file. So is it possible to open the file in r mode in one for loop and then immediately in w mode in another loop to enter the modified data?

If there is a simpler way to do this please help me out

Thank you.

Upvotes: 1

Views: 15520

Answers (3)

geomars
geomars

Reputation: 95

Just like others have mentioned, modifying the same file as both input and output without any backup method is such a terrible idea, especially in a condensed file like most .csv files, which is normally more complicated than a single .Txt based file, but if you insisted you can do with the following:

import csv

file path = 'some.csv'

with open('some.csv', 'rw', newline='') as csvfile:
    read_file = csv.reader(csvfile)
    write_file = csv.writer(csvfile)

Note that code above will trigger an error with a message ValueError: must have exactly one of create/read/write/append mode.

For safety, I preferred to split it into two different files

import csv

in_path = 'some.csv'
out_path = 'Out.csv'

with open(in_path, 'r', newline='') as inputFile, open(out_path, 'w', newline='') as writerFile:
    read_file = csv.reader(inputFile)
    write_file = csv.writer(writerFile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    for row in read_file:
    # your modifying input data code here
    ........

Upvotes: 1

user3089519
user3089519

Reputation:

Yes, you can open the same file in different modes in the same program. Just be sure not to do it at the same time. For example, this is perfectly valid:

with open("data.csv") as f:
  # read data into a data structure (list, dictionary, etc.)
  # process lines here if you can do it line by line

# process data here as needed (replacing your values etc.)

# now open the same filename again for writing
# the main thing is that the file has been previously closed
# (after the previous `with` block finishes, python will auto close the file)
with open("data.csv", "w") as f:
  # write to f here

As others have pointed out in the comments, reading and writing on the same file handle at the same time is generally a bad idea and won't work as you expect (unless for some very specific use case).

Upvotes: 2

Oliver Ilmjärv
Oliver Ilmjärv

Reputation: 341

You can do open("data.csv", "rw"), this allows you to read and write at the same time.

Upvotes: -1

Related Questions