Reading and Writing
In Rosalind, sample datasets are given as files. Python has a lot of functions for reading and writing information in files.
To access a file, you must first open it. To do so, you can use the
open()function, which takes two parameters: the name of the target file and the mode. Three modes are available:
r- read mode (the file is opened for reading)
w- write mode (the file is opened for writing, and if a file having the same name exists, it will be erased)
a- append mode (the file is opened for appending, which means that data is only to be added to the existing data in the file)f = open('input.txt', 'r')
This code told Python to open the file
rmode and store the result of this operation in a file object called
To obtain data from the file object you created, you can apply the following methods:
$n$bytes of data from the file as a string. When the size parameter is omitted, the entire contents of the file will be read and returned.
f.readline()takes a single line from the file. Every line (except the last line of file) terminates in a newline character (
\n). To remove this character from the end of a line you have read, use the
.strip()method. Note that every time you call
.readline()it takes the next line in the file.
f.readlines()returns a list containing every line in the file. If you need to obtain a particular line, you can use a list item index, e.g.,
f.readlines()returns the third line of the file object
f(don't forget that Python utilizes 0-based numbering!)
An alternative way to read lines is to loop over the file object.for line in f: print line
Using this loop, you can do anything you need with every line in the file.
If the data in the file are not separated by new lines but rather by whitespace, commas, or any other delimeter, then all three commands above will return the data only in the form of lines. As a workaround, you can use the command
line.split(). It uses whitespace in addition to
\nas delimeters by default, and runs of the same delimiter are regarded as a single separating space. For example,
'Beautiful is better than ugly.\n'.split()returns
['Beautiful', 'is', 'better', 'than', 'ugly.']
You can even specify the delimiter as a parameter of
'Explicit, is better, than implicit.'.split(",")returns
['Explicit', ' is better', ' than implicit.']
Another convenient command for file parsing is
.splitlines(). It returns a list of the lines in the string, breaking at line boundaries. Line breaks are not included.
'Simple is\nbetter than\ncomplex.\n'.splitlines()returns
['Simple is', 'better than', 'complex.']
When you at last complete all your calculations and obtain a result, you need to store it somewhere. To save a file, output the desired file in write mode (if there is no such file, it will be created automatically):f = open('output.txt', 'w')
You can then write your data using
.write()method.f.write('Any data you want to write into file')
f.write(string)writes the contents of
f. If you want to write something other than a string (an integer say), you must first convert it to a string by using the function
str().inscription = ['Rosalind Elsie Franklin ', 1920, 1958] s = str(inscription) f.write(s)
You also can write list items into a file one at a time by using a
forloop:for i in inscription: f.write(str(i) + '\n')
str(i)means that every item will start with a new line.
When you are finished writing file, don't forget that you must close it using the command
f.close(). It's a good habit to get into.
Given: A file containing at most 1000 lines.
Return: A file containing all the even-numbered lines from the original file. Assume 1-based numbering of lines.
Bravely bold Sir Robin rode forth from Camelot Yes, brave Sir Robin turned about He was not afraid to die, O brave Sir Robin And gallantly he chickened out He was not at all afraid to be killed in nasty ways Bravely talking to his feet Brave, brave, brave, brave Sir Robin He beat a very brave retreat
Yes, brave Sir Robin turned about And gallantly he chickened out Bravely talking to his feet He beat a very brave retreat