SlideShare une entreprise Scribd logo
1  sur  96
Python Programming, 2/e 1
Python Programming:
An Introduction to
Computer Science
Chapter 5
Sequences: Strings, Lists, and
Files
Python Programming, 2/e 2
Objectives
 To understand the string data type and
how strings are represented in the
computer.
 To be familiar with various operations
that can be performed on strings
through built-in functions and the string
library.
Python Programming, 2/e 3
Objectives (cont.)
 To understand the basic idea of sequences
and indexing as they apply to Python strings
and lists.
 To be able to apply string formatting to
produce attractive, informative program
output.
 To understand basic file processing concepts
and techniques for reading and writing text
files in Python.
Python Programming, 2/e 4
Objectives (cont.)
 To understand basic concepts of
cryptography.
 To be able to understand and write
programs that process textual
information.
Python Programming, 2/e 5
The String Data Type
 The most common use of personal
computers is word processing.
 Text is represented in programs by the
string data type.
 A string is a sequence of characters
enclosed within quotation marks (") or
apostrophes (').
Python Programming, 2/e 6
The String Data Type
>>> str1="Hello"
>>> str2='spam'
>>> print(str1, str2)
Hello spam
>>> type(str1)
<class 'str'>
>>> type(str2)
<class 'str'>
Python Programming, 2/e 7
The String Data Type
 Getting a string as input
>>> firstName = input("Please enter your name: ")
Please enter your name: John
>>> print("Hello", firstName)
Hello John
 Notice that the input is not evaluated. We
want to store the typed characters, not to
evaluate them as a Python expression.
Python Programming, 2/e 8
The String Data Type
 We can access the individual
characters in a string through indexing.
 The positions in a string are numbered
from the left, starting with 0.
 The general form is <string>[<expr>],
where the value of expr determines
which character is selected from the
string.
Python Programming, 2/e 9
The String Data Type
>>> greet = "Hello Bob"
>>> greet[0]
'H'
>>> print(greet[0], greet[2], greet[4])
H l o
>>> x = 8
>>> print(greet[x - 2])
B
H e l l o B o b
0 1 2 3 4 5 6 7 8
Python Programming, 2/e 10
The String Data Type
 In a string of n characters, the last character
is at position n-1 since we start counting with
0.
 We can index from the right side using
negative indexes.
>>> greet[-1]
'b'
>>> greet[-3]
'B'
H e l l o B o b
0 1 2 3 4 5 6 7 8
Python Programming, 2/e 11
The String Data Type
 Indexing returns a string containing a
single character from a larger string.
 We can also access a contiguous
sequence of characters, called a
substring, through a process called
slicing.
Python Programming, 2/e 12
The String Data Type
 Slicing:
<string>[<start>:<end>]
 start and end should both be ints
 The slice contains the substring
beginning at position start and runs up
to but doesn’t include the position
end.
Python Programming, 2/e 13
The String Data Type
>>> greet[0:3]
'Hel'
>>> greet[5:9]
' Bob'
>>> greet[:5]
'Hello'
>>> greet[5:]
' Bob'
>>> greet[:]
'Hello Bob'
H e l l o B o b
0 1 2 3 4 5 6 7 8
Python Programming, 2/e 14
The String Data Type
 If either expression is missing, then the
start or the end of the string are used.
 Can we put two strings together into a
longer string?
 Concatenation “glues” two strings
together (+)
 Repetition builds up a string by multiple
concatenations of a string with itself (*)
Python Programming, 2/e 15
The String Data Type
 The function len will return the length of a
string.
>>> "spam" + "eggs"
'spameggs'
>>> "Spam" + "And" + "Eggs"
'SpamAndEggs'
>>> 3 * "spam"
'spamspamspam'
>>> "spam" * 5
'spamspamspamspamspam'
>>> (3 * "spam") + ("eggs" * 5)
'spamspamspameggseggseggseggseggs'
Python Programming, 2/e 16
The String Data Type
>>> len("spam")
4
>>> for ch in "Spam!":
print (ch, end=" ")
S p a m !
Python Programming, 2/e 17
The String Data Type
Operator Meaning
+ Concatenation
* Repetition
<string>[] Indexing
<string>[:] Slicing
len(<string>) Length
for <var> in <string> Iteration through characters
Python Programming, 2/e 18
Simple String Processing
 Usernames on a computer system
 First initial, first seven characters of last
name
# get user’s first and last names
first = input("Please enter your first name (all lowercase): ")
last = input("Please enter your last name (all lowercase): ")
# concatenate first initial with 7 chars of last name
uname = first[0] + last[:7]
Python Programming, 2/e 19
Simple String Processing
>>>
Please enter your first name (all lowercase): john
Please enter your last name (all lowercase): doe
uname = jdoe
>>>
Please enter your first name (all lowercase): donna
Please enter your last name (all lowercase): rostenkowski
uname = drostenk
Python Programming, 2/e 20
Simple String Processing
 Another use – converting an int that
stands for the month into the three letter
abbreviation for that month.
 Store all the names in one big string:
“JanFebMarAprMayJunJulAugSepOctNovDec”
 Use the month number as an index for
slicing this string:
monthAbbrev = months[pos:pos+3]
Python Programming, 2/e 21
Simple String Processing
Month Number Position
Jan 1 0
Feb 2 3
Mar 3 6
Apr 4 9
 To get the correct position, subtract one
from the month number and multiply by three
Python Programming, 2/e 22
Simple String Processing
# month.py
# A program to print the abbreviation of a month, given its number
def main():
# months is used as a lookup table
months = "JanFebMarAprMayJunJulAugSepOctNovDec"
n = eval(input("Enter a month number (1-12): "))
# compute starting position of month n in months
pos = (n-1) * 3
# Grab the appropriate slice from months
monthAbbrev = months[pos:pos+3]
# print the result
print ("The month abbreviation is", monthAbbrev + ".")
main()
Python Programming, 2/e 23
Simple String Processing
>>> main()
Enter a month number (1-12): 1
The month abbreviation is Jan.
>>> main()
Enter a month number (1-12): 12
The month abbreviation is Dec.
 One weakness – this method only works
where the potential outputs all have the same
length.
 How could you handle spelling out the
months?
Python Programming, 2/e 24
Strings, Lists, and Sequences
 It turns out that strings are really a special
kind of sequence, so these operations also
apply to sequences!
>>> [1,2] + [3,4]
[1, 2, 3, 4]
>>> [1,2]*3
[1, 2, 1, 2, 1, 2]
>>> grades = ['A', 'B', 'C', 'D', 'F']
>>> grades[0]
'A'
>>> grades[2:4]
['C', 'D']
>>> len(grades)
5
Python Programming, 2/e 25
Strings, Lists, and Sequences
 Strings are always sequences of
characters, but lists can be sequences
of arbitrary values.
 Lists can have numbers, strings, or
both!
myList = [1, "Spam ", 4, "U"]
Python Programming, 2/e 26
Strings, Lists, and Sequences
 We can use the idea of a list to make
our previous month program even
simpler!
 We change the lookup table for months
to a list:
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"]
Python Programming, 2/e 27
Strings, Lists, and Sequences
 To get the months out of the sequence,
do this:
monthAbbrev = months[n-1]
Rather than this:
monthAbbrev = months[pos:pos+3]
Python Programming, 2/e 28
Strings, Lists, and Sequences
# month2.py
# A program to print the month name, given it's number.
# This version uses a list as a lookup table.
def main():
# months is a list used as a lookup table
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
n = eval(input("Enter a month number (1-12): "))
print ("The month abbreviation is", months[n-1] + ".")
main()
 Note that the months line overlaps a line.
Python knows that the expression isn’t
complete until the closing ] is encountered.
Python Programming, 2/e 29
Strings, Lists, and Sequences
# month2.py
# A program to print the month name, given it's number.
# This version uses a list as a lookup table.
def main():
# months is a list used as a lookup table
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
n = eval(input("Enter a month number (1-12): "))
print ("The month abbreviation is", months[n-1] + ".")
main()
 Since the list is indexed starting from 0, the n-
1 calculation is straight-forward enough to put
in the print statement without needing a
separate step.
Python Programming, 2/e 30
Strings, Lists, and Sequences
 This version of the program is easy to
extend to print out the whole month
name rather than an abbreviation!
months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"]
Python Programming, 2/e 31
Strings, Lists, and Sequences
 Lists are mutable, meaning they can be
changed. Strings can not be changed.
>>> myList = [34, 26, 15, 10]
>>> myList[2]
15
>>> myList[2] = 0
>>> myList
[34, 26, 0, 10]
>>> myString = "Hello World"
>>> myString[2]
'l'
>>> myString[2] = "p"
Traceback (most recent call last):
File "<pyshell#16>", line 1, in -toplevel-
myString[2] = "p"
TypeError: object doesn't support item assignment
Python Programming, 2/e 32
Strings and Secret Codes
 Inside the computer, strings are
represented as sequences of 1’s and
0’s, just like numbers.
 A string is stored as a sequence of
binary numbers, one number per
character.
 It doesn’t matter what value is assigned
as long as it’s done consistently.
Python Programming, 2/e 33
Strings and Secret Codes
 In the early days of computers, each
manufacturer used their own encoding
of numbers for characters.
 ASCII system (American Standard
Code for Information Interchange) uses
127 bit codes
 Python supports Unicode (100,000+
characters)
Python Programming, 2/e 34
Strings and Secret Codes
 The ord function returns the numeric (ordinal)
code of a single character.
 The chr function converts a numeric code to
the corresponding character.
>>> ord("A")
65
>>> ord("a")
97
>>> chr(97)
'a'
>>> chr(65)
'A'
Python Programming, 2/e 35
Strings and Secret Codes
 Using ord and char we can convert a
string into and out of numeric form.
 The encoding algorithm is simple:
get the message to encode
for each character in the message:
print the letter number of the character
 A for loop iterates over a sequence of
objects, so the for loop looks like:
for ch in <string>
Python Programming, 2/e 36
Strings and Secret Codes
# text2numbers.py
# A program to convert a textual message into a sequence of
# numbers, utlilizing the underlying Unicode encoding.
def main():
print("This program converts a textual message into a sequence")
print ("of numbers representing the Unicode encoding of the message.n")
# Get the message to encode
message = input("Please enter the message to encode: ")
print("nHere are the Unicode codes:")
# Loop through the message and print out the Unicode values
for ch in message:
print(ord(ch), end=" ")
print()
main()
Python Programming, 2/e 37
Strings and Secret Codes
 We now have a program to convert
messages into a type of “code”, but it
would be nice to have a program that
could decode the message!
 The outline for a decoder:
get the sequence of numbers to decode
message = “”
for each number in the input:
convert the number to the appropriate character
add the character to the end of the message
print the message
Python Programming, 2/e 38
Strings and Secret Codes
 The variable message is an
accumulator variable, initially set to the
empty string, the string with no
characters (“”).
 Each time through the loop, a number
from the input is converted to the
appropriate character and appended to
the end of the accumulator.
Python Programming, 2/e 39
Strings and Secret Codes
 How do we get the sequence of
numbers to decode?
 Read the input as a single string, then
split it apart into substrings, each of
which represents one number.
Python Programming, 2/e 40
Strings and Secret Codes
 The new algorithm
get the sequence of numbers as a string, inString
message = “”
for each of the smaller strings:
change the string of digits into the number it represents
append the ASCII character for that number to message
print message
 Strings are objects and have useful
methods associated with them
Python Programming, 2/e 41
Strings and Secret Codes
 One of these methods is split. This will
split a string into substrings based on
spaces.
>>> "Hello string methods!".split()
['Hello', 'string', 'methods!']
Python Programming, 2/e 42
Strings and Secret Codes
 Split can be used on characters other
than space, by supplying the character
as a parameter.
>>> "32,24,25,57".split(",")
['32', '24', '25', '57']
>>>
Python Programming, 2/e 43
Strings and Secret Codes
 How can we convert a string containing digits
into a number?
 Use our friend eval.
>>> numStr = "500"
>>> eval(numStr)
500
>>> x = eval(input("Enter a number "))
Enter a number 3.14
>>> print x
3.14
>>> type (x)
<type 'float'>
Python Programming, 2/e 44
Strings and Secret Codes
# numbers2text.py
# A program to convert a sequence of Unicode numbers into
# a string of text.
def main():
print ("This program converts a sequence of Unicode numbers into")
print ("the string of text that it represents.n")
# Get the message to encode
inString = input("Please enter the Unicode-encoded message: ")
# Loop through each substring and build Unicde message
message = ""
for numStr in inString.split(i):
# convert the (sub)string to a number
codeNum = eval(numStr)
# append character to message
message = message + chr(codeNum)
print("nThe decoded message is:", message)
main()
Python Programming, 2/e 45
Strings and Secret Codes
 The split function produces a sequence
of strings. numString gets each
successive substring.
 Each time through the loop, the next
substring is converted to the
appropriate Unicode character and
appended to the end of message.
Python Programming, 2/e 46
Strings and Secret Codes
-------------------------------------------------------------------------
This program converts a textual message into a sequence
of numbers representing the Unicode encoding of the message.
Please enter the message to encode: CS120 is fun!
Here are the Unicode codes:
67 83 49 50 48 32 105 115 32 102 117 110 33
--------------------------------------------------------------------------
This program converts a sequence of Unicode numbers into
the string of text that it represents.
Please enter the ASCII-encoded message: 67 83 49 50 48 32 105 115 32 102 117 110 33
The decoded message is: CS120 is fun!
Python Programming, 2/e 47
Other String Methods
 There are a number of other string
methods. Try them all!
 s.capitalize() – Copy of s with only the first
character capitalized
 s.title() – Copy of s; first character of each
word capitalized
 s.center(width) – Center s in a field of given
width
Python Programming, 2/e 48
Other String Operations
 s.count(sub) – Count the number of
occurrences of sub in s
 s.find(sub) – Find the first position where
sub occurs in s
 s.join(list) – Concatenate list of strings into
one large string using s as separator.
 s.ljust(width) – Like center, but s is left-
justified
Python Programming, 2/e 49
Other String Operations
 s.lower() – Copy of s in all lowercase
letters
 s.lstrip() – Copy of s with leading
whitespace removed
 s.replace(oldsub, newsub) – Replace
occurrences of oldsub in s with newsub
 s.rfind(sub) – Like find, but returns the
right-most position
 s.rjust(width) – Like center, but s is right-
justified
Python Programming, 2/e 50
Other String Operations
 s.rstrip() – Copy of s with trailing
whitespace removed
 s.split() – Split s into a list of substrings
 s.upper() – Copy of s; all characters
converted to uppercase
Python Programming, 2/e 51
From Encoding to Encryption
 The process of encoding information for the
purpose of keeping it secret or transmitting it
privately is called encryption.
 Cryptography is the study of encryption
methods.
 Encryption is used when transmitting credit
card and other personal information to a web
site.
Python Programming, 2/e 52
From Encoding to Encryption
 Strings are represented as a sort of
encoding problem, where each
character in the string is represented as
a number that’s stored in the computer.
 The code that is the mapping between
character and number is an industry
standard, so it’s not “secret”.
Python Programming, 2/e 53
From Encoding to Encryption
 The encoding/decoding programs we
wrote use a substitution cipher, where
each character of the original message,
known as the plaintext, is replaced by a
corresponding symbol in the cipher
alphabet.
 The resulting code is known as the
ciphertext.
Python Programming, 2/e 54
From Encoding to Encryption
 This type of code is relatively easy to
break.
 Each letter is always encoded with the
same symbol, so using statistical
analysis on the frequency of the letters
and trial and error, the original message
can be determined.
Python Programming, 2/e 55
From Encoding to Encryption
 Modern encryption converts messages
into numbers.
 Sophisticated mathematical formulas
convert these numbers into new
numbers – usually this transformation
consists of combining the message with
another value called the “key”
Python Programming, 2/e 56
From Encoding to Encryption
 To decrypt the message, the receiving end
needs an appropriate key so the encoding
can be reversed.
 In a private key system the same key is used
for encrypting and decrypting messages.
Everyone you know would need a copy of this
key to communicate with you, but it needs to
be kept a secret.
Python Programming, 2/e 57
From Encoding to Encryption
 In public key encryption, there are separate
keys for encrypting and decrypting the
message.
 In public key systems, the encryption key is
made publicly available, while the decryption
key is kept private.
 Anyone with the public key can send a
message, but only the person who holds the
private key (decryption key) can decrypt it.
Python Programming, 2/e 58
Input/Output as String
Manipulation
 Often we will need to do some string
operations to prepare our string data for
output (“pretty it up”)
 Let’s say we want to enter a date in the
format “05/24/2003” and output “May
24, 2003.” How could we do that?
Python Programming, 2/e 59
Input/Output as String
Manipulation
 Input the date in mm/dd/yyyy format (dateStr)
 Split dateStr into month, day, and year strings
 Convert the month string into a month number
 Use the month number to lookup the month
name
 Create a new date string in the form “Month Day,
Year”
 Output the new date string
Python Programming, 2/e 60
Input/Output as String
Manipulation
 The first two lines are easily
implemented!
dateStr = input("Enter a date (mm/dd/yyyy): ")
monthStr, dayStr, yearStr = dateStr.split("/")
 The date is input as a string, and then
“unpacked” into the three variables by
splitting it at the slashes and using
simultaneous assignment.
Python Programming, 2/e 61
Input/Output as String
Manipulation
 Next step: Convert monthStr into a
number
 We can use the int function on
monthStr to convert "05", for example,
into the integer 5. (int("05") = 5)
Python Programming, 2/e 62
Input/Output as String
Manipulation
 Note: eval would work, but for the leading 0
>>> int("05")
5
>>> eval("05")
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
eval("05")
File "<string>", line 1
05
^
SyntaxError: invalid token
 This is historical baggage. A leading 0 used
to be used for base 8 (octal) literals in
Python.
Python Programming, 2/e 63
Input/Output as String
Manipulation
months = [“January”, “February”, …, “December”]
monthStr = months[int(monthStr) – 1]
 Remember that since we start counting
at 0, we need to subtract one from the
month.
 Now let’s concatenate the output string
together!
Python Programming, 2/e 64
Input/Output as String
Manipulation
print ("The converted date is:", monthStr, dayStr+",", yearStr)
 Notice how the comma is appended to
dayStr with concatenation!
 >>> main()
Enter a date (mm/dd/yyyy): 01/23/2010
The converted date is: January 23, 2010
Python Programming, 2/e 65
Input/Output as String
Manipulation
 Sometimes we want to convert a number into
a string.
 We can use the str function.
>>> str(500)
'500'
>>> value = 3.14
>>> str(value)
'3.14'
>>> print("The value is", str(value) + ".")
The value is 3.14.
Python Programming, 2/e 66
Input/Output as String
Manipulation
 If value is a string, we can concatenate
a period onto the end of it.
 If value is an int, what happens?
>>> value = 3.14
>>> print("The value is", value + ".")
The value is
Traceback (most recent call last):
File "<pyshell#10>", line 1, in -toplevel-
print "The value is", value + "."
TypeError: unsupported operand type(s) for +: 'float' and 'str'
Python Programming, 2/e 67
Input/Output as String
Manipulation
 We now have a complete set of type
conversion operations:
Function Meaning
float(<expr>) Convert expr to a floating point value
int(<expr>) Convert expr to an integer value
str(<expr>) Return a string representation of expr
eval(<string>) Evaluate string as an expression
Python Programming, 2/e 68
String Formatting
 String formatting is an easy way to get
beautiful output!
Change Counter
Please enter the count of each coin type.
Quarters: 6
Dimes: 0
Nickels: 0
Pennies: 0
The total value of your change is 1.5
 Shouldn’t that be more like $1.50??
Python Programming, 2/e 69
String Formatting
 We can format our output by modifying
the print statement as follows:
print("The total value of your change is ${0:0.2f}".format(total))
 Now we get something like:
The total value of your change is $1.50
 Key is the string format method.
Python Programming, 2/e 70
String Formatting
 <template-string>.format(<values>)
 {} within the template-string mark “slots”
into which the values are inserted.
 Each slot has description that includes
format specifier telling Python how the
value for the slot should appear.
Python Programming, 2/e 71
String Formatting
print("The total value of your change is ${0:0.2f}".format(total)
 The template contains a single slot with
the description: 0:0.2f
 Form of description:
<index>:<format-specifier>
 Index tells which parameter to insert
into the slot. In this case, total.
Python Programming, 2/e 72
String Formatting
 The formatting specifier has the form:
<width>.<precision><type>
 f means "fixed point" number
 <width> tells us how many spaces to
use to display the value. 0 means to
use as much space as necessary.
 <precision> is the number of decimal
places.
Python Programming, 2/e 73
String Formatting
>>> "Hello {0} {1}, you may have won ${2}" .format("Mr.", "Smith", 10000)
'Hello Mr. Smith, you may have won $10000'
>>> 'This int, {0:5}, was placed in a field of width 5'.format(7)
'This int, 7, was placed in a field of width 5'
>>> 'This int, {0:10}, was placed in a field of witdh 10'.format(10)
'This int, 10, was placed in a field of witdh 10'
>>> 'This float, {0:10.5}, has width 10 and precision 5.'.format(3.1415926)
'This float, 3.1416, has width 10 and precision 5.'
>>> 'This float, {0:10.5f}, is fixed at 5 decimal places.'.format(3.1415926)
'This float, 3.14159, has width 0 and precision 5.'
Python Programming, 2/e 74
String Formatting
 If the width is wider than needed, numeric
values are right-justified and strings are left-
justified, by default.
 You can also specify a justification before the
width.
>>> "left justification: {0:<5}.format("Hi!")
'left justification: Hi! '
>>> "right justification: {0:>5}.format("Hi!")
'right justification: Hi!'
>>> "centered: {0:^5}".format("Hi!")
'centered: Hi! '
Python Programming, 2/e 75
Better Change Counter
 With what we know now about floating
point numbers, we might be uneasy
about using them in a money situation.
 One way around this problem is to keep
trace of money in cents using an int or
long int, and convert it into dollars and
cents when output.
Python Programming, 2/e 76
Better Change Counter
 If total is a value in cents (an int),
dollars = total//100
cents = total%100
 Cents is printed using width 0>2 to
right-justify it with leading 0s (if
necessary) into a field of width 2.
 Thus 5 cents becomes '05'
Python Programming, 2/e 77
Better Change Counter
# change2.py
# A program to calculate the value of some change in dollars.
# This version represents the total cash in cents.
def main():
print ("Change Countern")
print ("Please enter the count of each coin type.")
quarters = eval(input("Quarters: "))
dimes = eval(input("Dimes: "))
nickels = eval(input("Nickels: "))
pennies = eval(input("Pennies: "))
total = quarters * 25 + dimes * 10 + nickels * 5 + pennies
print ("The total value of your change is ${0}.{1:0>2}"
.format(total//100, total%100))
Python Programming, 2/e 78
Better Change Counter
>>> main()
Change Counter
Please enter the count of each coin
type.
Quarters: 0
Dimes: 0
Nickels: 0
Pennies: 1
The total value of your change is $0.01
>>> main()
Change Counter
Please enter the count of each coin
type.
Quarters: 12
Dimes: 1
Nickels: 0
Pennies: 4
The total value of your change is $3.14
Python Programming, 2/e 79
 A file is a sequence of data that is
stored in secondary memory (disk
drive).
 Files can contain any data type, but the
easiest to work with are text.
 A file usually contains more than one
line of text.
 Python uses the standard newline
character (n) to mark line breaks.
Files: Multi-line Strings
Python Programming, 2/e 80
Multi-Line Strings
 Hello
World
Goodbye 32
 When stored in a file:
HellonWorldnnGoodbye 32n
Python Programming, 2/e 81
Multi-Line Strings
 This is exactly the same thing as
embedding n in print statements.
 Remember, these special characters
only affect things when printed. They
don’t do anything during evaluation.
Python Programming, 2/e 82
File Processing
 The process of opening a file involves
associating a file on disk with an object
in memory.
 We can manipulate the file by
manipulating this object.
 Read from the file
 Write to the file
Python Programming, 2/e 83
File Processing
 When done with the file, it needs to be
closed. Closing the file causes any
outstanding operations and other
bookkeeping for the file to be
completed.
 In some cases, not properly closing a
file could result in data loss.
Python Programming, 2/e 84
File Processing
 Reading a file into a word processor
 File opened
 Contents read into RAM
 File closed
 Changes to the file are made to the copy
stored in memory, not on the disk.
Python Programming, 2/e 85
File Processing
 Saving a word processing file
 The original file on the disk is reopened in
a mode that will allow writing (this actually
erases the old contents)
 File writing operations copy the version of
the document in memory to the disk
 The file is closed
Python Programming, 2/e 86
File Processing
 Working with text files in Python
 Associate a disk file with a file object using
the open function
<filevar> = open(<name>, <mode>)
 Name is a string with the actual file name
on the disk. The mode is either ‘r’ or ‘w’
depending on whether we are reading or
writing the file.
 Infile = open("numbers.dat", "r")
Python Programming, 2/e 87
File Methods
 <file>.read() – returns the entire remaining
contents of the file as a single (possibly large,
multi-line) string
 <file>.readline() – returns the next line of the
file. This is all text up to and including the
next newline character
 <file>.readlines() – returns a list of the
remaining lines in the file. Each list item is a
single line including the newline characters.
Python Programming, 2/e 88
File Processing
# printfile.py
# Prints a file to the screen.
def main():
fname = input("Enter filename: ")
infile = open(fname,'r')
data = infile.read()
print(data)
main()
 First, prompt the user for a file name
 Open the file for reading
 The file is read as one string and stored in the
variable data
Python Programming, 2/e 89
File Processing
 readline can be used to read the next
line from a file, including the trailing
newline character
 infile = open(someFile, "r")
for i in range(5):
line = infile.readline()
print line[:-1]
 This reads the first 5 lines of a file
 Slicing is used to strip out the newline
characters at the ends of the lines
Python Programming, 2/e 90
File Processing
 Another way to loop through the
contents of a file is to read it in with
readlines and then loop through the
resulting list.
 infile = open(someFile, "r")
for line in infile.readlines():
# Line processing here
infile.close()
Python Programming, 2/e 91
File Processing
 Python treats the file itself as a
sequence of lines!
 Infile = open(someFile, "r")
for line in infile:
# process the line here
infile.close()
Python Programming, 2/e 92
File Processing
 Opening a file for writing prepares the
file to receive data
 If you open an existing file for writing,
you wipe out the file’s contents. If the
named file does not exist, a new one is
created.
 Outfile = open("mydata.out", "w")
 print(<expressions>, file=Outfile)
Python Programming, 2/e 93
Example Program: Batch
Usernames
 Batch mode processing is where
program input and output are done
through files (the program is not
designed to be interactive)
 Let’s create usernames for a computer
system where the first and last names
come from an input file.
Python Programming, 2/e 94
Example Program: Batch
Usernames
# userfile.py
# Program to create a file of usernames in batch mode.
def main():
print ("This program creates a file of usernames from a")
print ("file of names.")
# get the file names
infileName = input("What file are the names in? ")
outfileName = input("What file should the usernames go in? ")
# open the files
infile = open(infileName, 'r')
outfile = open(outfileName, 'w')
Python Programming, 2/e 95
Example Program: Batch
Usernames
# process each line of the input file
for line in infile:
# get the first and last names from line
first, last = line.split()
# create a username
uname = (first[0]+last[:7]).lower()
# write it to the output file
print(uname, file=outfile)
# close both files
infile.close()
outfile.close()
print("Usernames have been written to", outfileName)
Python Programming, 2/e 96
Example Program: Batch
Usernames
 Things to note:
 It’s not unusual for programs to have multiple files
open for reading and writing at the same time.
 The lower method is used to convert the names
into all lower case, in the event the names are
mixed upper and lower case.

Contenu connexe

Tendances

Tendances (20)

Python- strings
Python- stringsPython- strings
Python- strings
 
Pytho lists
Pytho listsPytho lists
Pytho lists
 
Python Variable Types, List, Tuple, Dictionary
Python Variable Types, List, Tuple, DictionaryPython Variable Types, List, Tuple, Dictionary
Python Variable Types, List, Tuple, Dictionary
 
Introduction to Python - Training for Kids
Introduction to Python - Training for KidsIntroduction to Python - Training for Kids
Introduction to Python - Training for Kids
 
AmI 2015 - Python basics
AmI 2015 - Python basicsAmI 2015 - Python basics
AmI 2015 - Python basics
 
Lecture2
Lecture2Lecture2
Lecture2
 
Basics of python 3
Basics of python 3Basics of python 3
Basics of python 3
 
Lecture3
Lecture3Lecture3
Lecture3
 
Lecture4
Lecture4Lecture4
Lecture4
 
Learn 90% of Python in 90 Minutes
Learn 90% of Python in 90 MinutesLearn 90% of Python in 90 Minutes
Learn 90% of Python in 90 Minutes
 
AmI 2016 - Python basics
AmI 2016 - Python basicsAmI 2016 - Python basics
AmI 2016 - Python basics
 
Python 101 1
Python 101   1Python 101   1
Python 101 1
 
Python list
Python listPython list
Python list
 
Programming in Python
Programming in Python Programming in Python
Programming in Python
 
15CS664- Python Application Programming - Module 3
15CS664- Python Application Programming - Module 315CS664- Python Application Programming - Module 3
15CS664- Python Application Programming - Module 3
 
15CS664-Python Application Programming - Module 3 and 4
15CS664-Python Application Programming - Module 3 and 415CS664-Python Application Programming - Module 3 and 4
15CS664-Python Application Programming - Module 3 and 4
 
Strings in Python
Strings in PythonStrings in Python
Strings in Python
 
paython practical
paython practical paython practical
paython practical
 
Computer science solution - programming - big c plus plus
Computer science   solution - programming - big c plus plusComputer science   solution - programming - big c plus plus
Computer science solution - programming - big c plus plus
 
Python for Beginners(v1)
Python for Beginners(v1)Python for Beginners(v1)
Python for Beginners(v1)
 

En vedette

Manipulating strings
Manipulating stringsManipulating strings
Manipulating stringsNicole Ryan
 
Synapse india reviews on php and sql
Synapse india reviews on php and sqlSynapse india reviews on php and sql
Synapse india reviews on php and sqlsaritasingh19866
 
The PHP mysqlnd plugin talk - plugins an alternative to MySQL Proxy
The PHP mysqlnd plugin talk - plugins an alternative to MySQL ProxyThe PHP mysqlnd plugin talk - plugins an alternative to MySQL Proxy
The PHP mysqlnd plugin talk - plugins an alternative to MySQL ProxyUlf Wendel
 
Php connectivitywithmysql
Php connectivitywithmysqlPhp connectivitywithmysql
Php connectivitywithmysqlBhumivaghasiya
 
10 11-hart installing pythonsoftware
10 11-hart installing pythonsoftware10 11-hart installing pythonsoftware
10 11-hart installing pythonsoftwareWilliam Hart
 
Pembahasan NETCOM Beginner Level Skill Pretest
Pembahasan NETCOM Beginner Level Skill PretestPembahasan NETCOM Beginner Level Skill Pretest
Pembahasan NETCOM Beginner Level Skill PretestI Putu Hariyadi
 
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionKoneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionI Putu Hariyadi
 
Class 5 - PHP Strings
Class 5 - PHP StringsClass 5 - PHP Strings
Class 5 - PHP StringsAhmed Swilam
 
How To Install Apache, MySQL & PHP on Windows Vista
How To Install Apache, MySQL & PHP on Windows VistaHow To Install Apache, MySQL & PHP on Windows Vista
How To Install Apache, MySQL & PHP on Windows VistaMochamad Yusuf
 
Php String And Regular Expressions
Php String  And Regular ExpressionsPhp String  And Regular Expressions
Php String And Regular Expressionsmussawir20
 

En vedette (20)

Python lecture 10
Python lecture 10Python lecture 10
Python lecture 10
 
Manipulating strings
Manipulating stringsManipulating strings
Manipulating strings
 
Synapse india reviews on php and sql
Synapse india reviews on php and sqlSynapse india reviews on php and sql
Synapse india reviews on php and sql
 
The PHP mysqlnd plugin talk - plugins an alternative to MySQL Proxy
The PHP mysqlnd plugin talk - plugins an alternative to MySQL ProxyThe PHP mysqlnd plugin talk - plugins an alternative to MySQL Proxy
The PHP mysqlnd plugin talk - plugins an alternative to MySQL Proxy
 
Python lecture 02
Python lecture 02Python lecture 02
Python lecture 02
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Tt presentation.ppt
Tt presentation.pptTt presentation.ppt
Tt presentation.ppt
 
Php connectivitywithmysql
Php connectivitywithmysqlPhp connectivitywithmysql
Php connectivitywithmysql
 
10 11-hart installing pythonsoftware
10 11-hart installing pythonsoftware10 11-hart installing pythonsoftware
10 11-hart installing pythonsoftware
 
PHP Regular Expressions
PHP Regular ExpressionsPHP Regular Expressions
PHP Regular Expressions
 
Php database connectivity
Php database connectivityPhp database connectivity
Php database connectivity
 
Pembahasan NETCOM Beginner Level Skill Pretest
Pembahasan NETCOM Beginner Level Skill PretestPembahasan NETCOM Beginner Level Skill Pretest
Pembahasan NETCOM Beginner Level Skill Pretest
 
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi ExtensionKoneksi PHP ke Database MySQL menggunakan MySQLi Extension
Koneksi PHP ke Database MySQL menggunakan MySQLi Extension
 
DIWE - File handling with PHP
DIWE - File handling with PHPDIWE - File handling with PHP
DIWE - File handling with PHP
 
Class 5 - PHP Strings
Class 5 - PHP StringsClass 5 - PHP Strings
Class 5 - PHP Strings
 
How To Install Apache, MySQL & PHP on Windows Vista
How To Install Apache, MySQL & PHP on Windows VistaHow To Install Apache, MySQL & PHP on Windows Vista
How To Install Apache, MySQL & PHP on Windows Vista
 
Php Ppt
Php PptPhp Ppt
Php Ppt
 
Php forms
Php formsPhp forms
Php forms
 
Php String And Regular Expressions
Php String  And Regular ExpressionsPhp String  And Regular Expressions
Php String And Regular Expressions
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 

Similaire à Python Programming Guide: Strings, Lists, Files and Cryptography

Similaire à Python Programming Guide: Strings, Lists, Files and Cryptography (20)

Chapter05.ppt
Chapter05.pptChapter05.ppt
Chapter05.ppt
 
Python - Data Collection
Python - Data CollectionPython - Data Collection
Python - Data Collection
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 
‏‏chap6 list tuples.pptx
‏‏chap6 list tuples.pptx‏‏chap6 list tuples.pptx
‏‏chap6 list tuples.pptx
 
Python lists
Python listsPython lists
Python lists
 
Programming with Python
Programming with PythonProgramming with Python
Programming with Python
 
Python 3.pptx
Python 3.pptxPython 3.pptx
Python 3.pptx
 
Lecture 5 – Computing with Numbers (Math Lib).pptx
Lecture 5 – Computing with Numbers (Math Lib).pptxLecture 5 – Computing with Numbers (Math Lib).pptx
Lecture 5 – Computing with Numbers (Math Lib).pptx
 
Lecture 5 – Computing with Numbers (Math Lib).pptx
Lecture 5 – Computing with Numbers (Math Lib).pptxLecture 5 – Computing with Numbers (Math Lib).pptx
Lecture 5 – Computing with Numbers (Math Lib).pptx
 
Python Session - 3
Python Session - 3Python Session - 3
Python Session - 3
 
UNIT III PYTHON.pptx python basic ppt ppt
UNIT III PYTHON.pptx python basic ppt pptUNIT III PYTHON.pptx python basic ppt ppt
UNIT III PYTHON.pptx python basic ppt ppt
 
Python data type
Python data typePython data type
Python data type
 
Python elements list you can study .pdf
Python elements list you can study  .pdfPython elements list you can study  .pdf
Python elements list you can study .pdf
 
Pythonlearn-08-Lists.pptx
Pythonlearn-08-Lists.pptxPythonlearn-08-Lists.pptx
Pythonlearn-08-Lists.pptx
 
Python for Beginners(v3)
Python for Beginners(v3)Python for Beginners(v3)
Python for Beginners(v3)
 
GE3151 PSPP UNIT IV QUESTION BANK.docx.pdf
GE3151 PSPP UNIT IV QUESTION BANK.docx.pdfGE3151 PSPP UNIT IV QUESTION BANK.docx.pdf
GE3151 PSPP UNIT IV QUESTION BANK.docx.pdf
 
scripting in Python
scripting in Pythonscripting in Python
scripting in Python
 
arraycreation.pptx
arraycreation.pptxarraycreation.pptx
arraycreation.pptx
 
Python language data types
Python language data typesPython language data types
Python language data types
 

Dernier

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Dernier (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Python Programming Guide: Strings, Lists, Files and Cryptography

  • 1. Python Programming, 2/e 1 Python Programming: An Introduction to Computer Science Chapter 5 Sequences: Strings, Lists, and Files
  • 2. Python Programming, 2/e 2 Objectives  To understand the string data type and how strings are represented in the computer.  To be familiar with various operations that can be performed on strings through built-in functions and the string library.
  • 3. Python Programming, 2/e 3 Objectives (cont.)  To understand the basic idea of sequences and indexing as they apply to Python strings and lists.  To be able to apply string formatting to produce attractive, informative program output.  To understand basic file processing concepts and techniques for reading and writing text files in Python.
  • 4. Python Programming, 2/e 4 Objectives (cont.)  To understand basic concepts of cryptography.  To be able to understand and write programs that process textual information.
  • 5. Python Programming, 2/e 5 The String Data Type  The most common use of personal computers is word processing.  Text is represented in programs by the string data type.  A string is a sequence of characters enclosed within quotation marks (") or apostrophes (').
  • 6. Python Programming, 2/e 6 The String Data Type >>> str1="Hello" >>> str2='spam' >>> print(str1, str2) Hello spam >>> type(str1) <class 'str'> >>> type(str2) <class 'str'>
  • 7. Python Programming, 2/e 7 The String Data Type  Getting a string as input >>> firstName = input("Please enter your name: ") Please enter your name: John >>> print("Hello", firstName) Hello John  Notice that the input is not evaluated. We want to store the typed characters, not to evaluate them as a Python expression.
  • 8. Python Programming, 2/e 8 The String Data Type  We can access the individual characters in a string through indexing.  The positions in a string are numbered from the left, starting with 0.  The general form is <string>[<expr>], where the value of expr determines which character is selected from the string.
  • 9. Python Programming, 2/e 9 The String Data Type >>> greet = "Hello Bob" >>> greet[0] 'H' >>> print(greet[0], greet[2], greet[4]) H l o >>> x = 8 >>> print(greet[x - 2]) B H e l l o B o b 0 1 2 3 4 5 6 7 8
  • 10. Python Programming, 2/e 10 The String Data Type  In a string of n characters, the last character is at position n-1 since we start counting with 0.  We can index from the right side using negative indexes. >>> greet[-1] 'b' >>> greet[-3] 'B' H e l l o B o b 0 1 2 3 4 5 6 7 8
  • 11. Python Programming, 2/e 11 The String Data Type  Indexing returns a string containing a single character from a larger string.  We can also access a contiguous sequence of characters, called a substring, through a process called slicing.
  • 12. Python Programming, 2/e 12 The String Data Type  Slicing: <string>[<start>:<end>]  start and end should both be ints  The slice contains the substring beginning at position start and runs up to but doesn’t include the position end.
  • 13. Python Programming, 2/e 13 The String Data Type >>> greet[0:3] 'Hel' >>> greet[5:9] ' Bob' >>> greet[:5] 'Hello' >>> greet[5:] ' Bob' >>> greet[:] 'Hello Bob' H e l l o B o b 0 1 2 3 4 5 6 7 8
  • 14. Python Programming, 2/e 14 The String Data Type  If either expression is missing, then the start or the end of the string are used.  Can we put two strings together into a longer string?  Concatenation “glues” two strings together (+)  Repetition builds up a string by multiple concatenations of a string with itself (*)
  • 15. Python Programming, 2/e 15 The String Data Type  The function len will return the length of a string. >>> "spam" + "eggs" 'spameggs' >>> "Spam" + "And" + "Eggs" 'SpamAndEggs' >>> 3 * "spam" 'spamspamspam' >>> "spam" * 5 'spamspamspamspamspam' >>> (3 * "spam") + ("eggs" * 5) 'spamspamspameggseggseggseggseggs'
  • 16. Python Programming, 2/e 16 The String Data Type >>> len("spam") 4 >>> for ch in "Spam!": print (ch, end=" ") S p a m !
  • 17. Python Programming, 2/e 17 The String Data Type Operator Meaning + Concatenation * Repetition <string>[] Indexing <string>[:] Slicing len(<string>) Length for <var> in <string> Iteration through characters
  • 18. Python Programming, 2/e 18 Simple String Processing  Usernames on a computer system  First initial, first seven characters of last name # get user’s first and last names first = input("Please enter your first name (all lowercase): ") last = input("Please enter your last name (all lowercase): ") # concatenate first initial with 7 chars of last name uname = first[0] + last[:7]
  • 19. Python Programming, 2/e 19 Simple String Processing >>> Please enter your first name (all lowercase): john Please enter your last name (all lowercase): doe uname = jdoe >>> Please enter your first name (all lowercase): donna Please enter your last name (all lowercase): rostenkowski uname = drostenk
  • 20. Python Programming, 2/e 20 Simple String Processing  Another use – converting an int that stands for the month into the three letter abbreviation for that month.  Store all the names in one big string: “JanFebMarAprMayJunJulAugSepOctNovDec”  Use the month number as an index for slicing this string: monthAbbrev = months[pos:pos+3]
  • 21. Python Programming, 2/e 21 Simple String Processing Month Number Position Jan 1 0 Feb 2 3 Mar 3 6 Apr 4 9  To get the correct position, subtract one from the month number and multiply by three
  • 22. Python Programming, 2/e 22 Simple String Processing # month.py # A program to print the abbreviation of a month, given its number def main(): # months is used as a lookup table months = "JanFebMarAprMayJunJulAugSepOctNovDec" n = eval(input("Enter a month number (1-12): ")) # compute starting position of month n in months pos = (n-1) * 3 # Grab the appropriate slice from months monthAbbrev = months[pos:pos+3] # print the result print ("The month abbreviation is", monthAbbrev + ".") main()
  • 23. Python Programming, 2/e 23 Simple String Processing >>> main() Enter a month number (1-12): 1 The month abbreviation is Jan. >>> main() Enter a month number (1-12): 12 The month abbreviation is Dec.  One weakness – this method only works where the potential outputs all have the same length.  How could you handle spelling out the months?
  • 24. Python Programming, 2/e 24 Strings, Lists, and Sequences  It turns out that strings are really a special kind of sequence, so these operations also apply to sequences! >>> [1,2] + [3,4] [1, 2, 3, 4] >>> [1,2]*3 [1, 2, 1, 2, 1, 2] >>> grades = ['A', 'B', 'C', 'D', 'F'] >>> grades[0] 'A' >>> grades[2:4] ['C', 'D'] >>> len(grades) 5
  • 25. Python Programming, 2/e 25 Strings, Lists, and Sequences  Strings are always sequences of characters, but lists can be sequences of arbitrary values.  Lists can have numbers, strings, or both! myList = [1, "Spam ", 4, "U"]
  • 26. Python Programming, 2/e 26 Strings, Lists, and Sequences  We can use the idea of a list to make our previous month program even simpler!  We change the lookup table for months to a list: months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
  • 27. Python Programming, 2/e 27 Strings, Lists, and Sequences  To get the months out of the sequence, do this: monthAbbrev = months[n-1] Rather than this: monthAbbrev = months[pos:pos+3]
  • 28. Python Programming, 2/e 28 Strings, Lists, and Sequences # month2.py # A program to print the month name, given it's number. # This version uses a list as a lookup table. def main(): # months is a list used as a lookup table months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] n = eval(input("Enter a month number (1-12): ")) print ("The month abbreviation is", months[n-1] + ".") main()  Note that the months line overlaps a line. Python knows that the expression isn’t complete until the closing ] is encountered.
  • 29. Python Programming, 2/e 29 Strings, Lists, and Sequences # month2.py # A program to print the month name, given it's number. # This version uses a list as a lookup table. def main(): # months is a list used as a lookup table months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] n = eval(input("Enter a month number (1-12): ")) print ("The month abbreviation is", months[n-1] + ".") main()  Since the list is indexed starting from 0, the n- 1 calculation is straight-forward enough to put in the print statement without needing a separate step.
  • 30. Python Programming, 2/e 30 Strings, Lists, and Sequences  This version of the program is easy to extend to print out the whole month name rather than an abbreviation! months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  • 31. Python Programming, 2/e 31 Strings, Lists, and Sequences  Lists are mutable, meaning they can be changed. Strings can not be changed. >>> myList = [34, 26, 15, 10] >>> myList[2] 15 >>> myList[2] = 0 >>> myList [34, 26, 0, 10] >>> myString = "Hello World" >>> myString[2] 'l' >>> myString[2] = "p" Traceback (most recent call last): File "<pyshell#16>", line 1, in -toplevel- myString[2] = "p" TypeError: object doesn't support item assignment
  • 32. Python Programming, 2/e 32 Strings and Secret Codes  Inside the computer, strings are represented as sequences of 1’s and 0’s, just like numbers.  A string is stored as a sequence of binary numbers, one number per character.  It doesn’t matter what value is assigned as long as it’s done consistently.
  • 33. Python Programming, 2/e 33 Strings and Secret Codes  In the early days of computers, each manufacturer used their own encoding of numbers for characters.  ASCII system (American Standard Code for Information Interchange) uses 127 bit codes  Python supports Unicode (100,000+ characters)
  • 34. Python Programming, 2/e 34 Strings and Secret Codes  The ord function returns the numeric (ordinal) code of a single character.  The chr function converts a numeric code to the corresponding character. >>> ord("A") 65 >>> ord("a") 97 >>> chr(97) 'a' >>> chr(65) 'A'
  • 35. Python Programming, 2/e 35 Strings and Secret Codes  Using ord and char we can convert a string into and out of numeric form.  The encoding algorithm is simple: get the message to encode for each character in the message: print the letter number of the character  A for loop iterates over a sequence of objects, so the for loop looks like: for ch in <string>
  • 36. Python Programming, 2/e 36 Strings and Secret Codes # text2numbers.py # A program to convert a textual message into a sequence of # numbers, utlilizing the underlying Unicode encoding. def main(): print("This program converts a textual message into a sequence") print ("of numbers representing the Unicode encoding of the message.n") # Get the message to encode message = input("Please enter the message to encode: ") print("nHere are the Unicode codes:") # Loop through the message and print out the Unicode values for ch in message: print(ord(ch), end=" ") print() main()
  • 37. Python Programming, 2/e 37 Strings and Secret Codes  We now have a program to convert messages into a type of “code”, but it would be nice to have a program that could decode the message!  The outline for a decoder: get the sequence of numbers to decode message = “” for each number in the input: convert the number to the appropriate character add the character to the end of the message print the message
  • 38. Python Programming, 2/e 38 Strings and Secret Codes  The variable message is an accumulator variable, initially set to the empty string, the string with no characters (“”).  Each time through the loop, a number from the input is converted to the appropriate character and appended to the end of the accumulator.
  • 39. Python Programming, 2/e 39 Strings and Secret Codes  How do we get the sequence of numbers to decode?  Read the input as a single string, then split it apart into substrings, each of which represents one number.
  • 40. Python Programming, 2/e 40 Strings and Secret Codes  The new algorithm get the sequence of numbers as a string, inString message = “” for each of the smaller strings: change the string of digits into the number it represents append the ASCII character for that number to message print message  Strings are objects and have useful methods associated with them
  • 41. Python Programming, 2/e 41 Strings and Secret Codes  One of these methods is split. This will split a string into substrings based on spaces. >>> "Hello string methods!".split() ['Hello', 'string', 'methods!']
  • 42. Python Programming, 2/e 42 Strings and Secret Codes  Split can be used on characters other than space, by supplying the character as a parameter. >>> "32,24,25,57".split(",") ['32', '24', '25', '57'] >>>
  • 43. Python Programming, 2/e 43 Strings and Secret Codes  How can we convert a string containing digits into a number?  Use our friend eval. >>> numStr = "500" >>> eval(numStr) 500 >>> x = eval(input("Enter a number ")) Enter a number 3.14 >>> print x 3.14 >>> type (x) <type 'float'>
  • 44. Python Programming, 2/e 44 Strings and Secret Codes # numbers2text.py # A program to convert a sequence of Unicode numbers into # a string of text. def main(): print ("This program converts a sequence of Unicode numbers into") print ("the string of text that it represents.n") # Get the message to encode inString = input("Please enter the Unicode-encoded message: ") # Loop through each substring and build Unicde message message = "" for numStr in inString.split(i): # convert the (sub)string to a number codeNum = eval(numStr) # append character to message message = message + chr(codeNum) print("nThe decoded message is:", message) main()
  • 45. Python Programming, 2/e 45 Strings and Secret Codes  The split function produces a sequence of strings. numString gets each successive substring.  Each time through the loop, the next substring is converted to the appropriate Unicode character and appended to the end of message.
  • 46. Python Programming, 2/e 46 Strings and Secret Codes ------------------------------------------------------------------------- This program converts a textual message into a sequence of numbers representing the Unicode encoding of the message. Please enter the message to encode: CS120 is fun! Here are the Unicode codes: 67 83 49 50 48 32 105 115 32 102 117 110 33 -------------------------------------------------------------------------- This program converts a sequence of Unicode numbers into the string of text that it represents. Please enter the ASCII-encoded message: 67 83 49 50 48 32 105 115 32 102 117 110 33 The decoded message is: CS120 is fun!
  • 47. Python Programming, 2/e 47 Other String Methods  There are a number of other string methods. Try them all!  s.capitalize() – Copy of s with only the first character capitalized  s.title() – Copy of s; first character of each word capitalized  s.center(width) – Center s in a field of given width
  • 48. Python Programming, 2/e 48 Other String Operations  s.count(sub) – Count the number of occurrences of sub in s  s.find(sub) – Find the first position where sub occurs in s  s.join(list) – Concatenate list of strings into one large string using s as separator.  s.ljust(width) – Like center, but s is left- justified
  • 49. Python Programming, 2/e 49 Other String Operations  s.lower() – Copy of s in all lowercase letters  s.lstrip() – Copy of s with leading whitespace removed  s.replace(oldsub, newsub) – Replace occurrences of oldsub in s with newsub  s.rfind(sub) – Like find, but returns the right-most position  s.rjust(width) – Like center, but s is right- justified
  • 50. Python Programming, 2/e 50 Other String Operations  s.rstrip() – Copy of s with trailing whitespace removed  s.split() – Split s into a list of substrings  s.upper() – Copy of s; all characters converted to uppercase
  • 51. Python Programming, 2/e 51 From Encoding to Encryption  The process of encoding information for the purpose of keeping it secret or transmitting it privately is called encryption.  Cryptography is the study of encryption methods.  Encryption is used when transmitting credit card and other personal information to a web site.
  • 52. Python Programming, 2/e 52 From Encoding to Encryption  Strings are represented as a sort of encoding problem, where each character in the string is represented as a number that’s stored in the computer.  The code that is the mapping between character and number is an industry standard, so it’s not “secret”.
  • 53. Python Programming, 2/e 53 From Encoding to Encryption  The encoding/decoding programs we wrote use a substitution cipher, where each character of the original message, known as the plaintext, is replaced by a corresponding symbol in the cipher alphabet.  The resulting code is known as the ciphertext.
  • 54. Python Programming, 2/e 54 From Encoding to Encryption  This type of code is relatively easy to break.  Each letter is always encoded with the same symbol, so using statistical analysis on the frequency of the letters and trial and error, the original message can be determined.
  • 55. Python Programming, 2/e 55 From Encoding to Encryption  Modern encryption converts messages into numbers.  Sophisticated mathematical formulas convert these numbers into new numbers – usually this transformation consists of combining the message with another value called the “key”
  • 56. Python Programming, 2/e 56 From Encoding to Encryption  To decrypt the message, the receiving end needs an appropriate key so the encoding can be reversed.  In a private key system the same key is used for encrypting and decrypting messages. Everyone you know would need a copy of this key to communicate with you, but it needs to be kept a secret.
  • 57. Python Programming, 2/e 57 From Encoding to Encryption  In public key encryption, there are separate keys for encrypting and decrypting the message.  In public key systems, the encryption key is made publicly available, while the decryption key is kept private.  Anyone with the public key can send a message, but only the person who holds the private key (decryption key) can decrypt it.
  • 58. Python Programming, 2/e 58 Input/Output as String Manipulation  Often we will need to do some string operations to prepare our string data for output (“pretty it up”)  Let’s say we want to enter a date in the format “05/24/2003” and output “May 24, 2003.” How could we do that?
  • 59. Python Programming, 2/e 59 Input/Output as String Manipulation  Input the date in mm/dd/yyyy format (dateStr)  Split dateStr into month, day, and year strings  Convert the month string into a month number  Use the month number to lookup the month name  Create a new date string in the form “Month Day, Year”  Output the new date string
  • 60. Python Programming, 2/e 60 Input/Output as String Manipulation  The first two lines are easily implemented! dateStr = input("Enter a date (mm/dd/yyyy): ") monthStr, dayStr, yearStr = dateStr.split("/")  The date is input as a string, and then “unpacked” into the three variables by splitting it at the slashes and using simultaneous assignment.
  • 61. Python Programming, 2/e 61 Input/Output as String Manipulation  Next step: Convert monthStr into a number  We can use the int function on monthStr to convert "05", for example, into the integer 5. (int("05") = 5)
  • 62. Python Programming, 2/e 62 Input/Output as String Manipulation  Note: eval would work, but for the leading 0 >>> int("05") 5 >>> eval("05") Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> eval("05") File "<string>", line 1 05 ^ SyntaxError: invalid token  This is historical baggage. A leading 0 used to be used for base 8 (octal) literals in Python.
  • 63. Python Programming, 2/e 63 Input/Output as String Manipulation months = [“January”, “February”, …, “December”] monthStr = months[int(monthStr) – 1]  Remember that since we start counting at 0, we need to subtract one from the month.  Now let’s concatenate the output string together!
  • 64. Python Programming, 2/e 64 Input/Output as String Manipulation print ("The converted date is:", monthStr, dayStr+",", yearStr)  Notice how the comma is appended to dayStr with concatenation!  >>> main() Enter a date (mm/dd/yyyy): 01/23/2010 The converted date is: January 23, 2010
  • 65. Python Programming, 2/e 65 Input/Output as String Manipulation  Sometimes we want to convert a number into a string.  We can use the str function. >>> str(500) '500' >>> value = 3.14 >>> str(value) '3.14' >>> print("The value is", str(value) + ".") The value is 3.14.
  • 66. Python Programming, 2/e 66 Input/Output as String Manipulation  If value is a string, we can concatenate a period onto the end of it.  If value is an int, what happens? >>> value = 3.14 >>> print("The value is", value + ".") The value is Traceback (most recent call last): File "<pyshell#10>", line 1, in -toplevel- print "The value is", value + "." TypeError: unsupported operand type(s) for +: 'float' and 'str'
  • 67. Python Programming, 2/e 67 Input/Output as String Manipulation  We now have a complete set of type conversion operations: Function Meaning float(<expr>) Convert expr to a floating point value int(<expr>) Convert expr to an integer value str(<expr>) Return a string representation of expr eval(<string>) Evaluate string as an expression
  • 68. Python Programming, 2/e 68 String Formatting  String formatting is an easy way to get beautiful output! Change Counter Please enter the count of each coin type. Quarters: 6 Dimes: 0 Nickels: 0 Pennies: 0 The total value of your change is 1.5  Shouldn’t that be more like $1.50??
  • 69. Python Programming, 2/e 69 String Formatting  We can format our output by modifying the print statement as follows: print("The total value of your change is ${0:0.2f}".format(total))  Now we get something like: The total value of your change is $1.50  Key is the string format method.
  • 70. Python Programming, 2/e 70 String Formatting  <template-string>.format(<values>)  {} within the template-string mark “slots” into which the values are inserted.  Each slot has description that includes format specifier telling Python how the value for the slot should appear.
  • 71. Python Programming, 2/e 71 String Formatting print("The total value of your change is ${0:0.2f}".format(total)  The template contains a single slot with the description: 0:0.2f  Form of description: <index>:<format-specifier>  Index tells which parameter to insert into the slot. In this case, total.
  • 72. Python Programming, 2/e 72 String Formatting  The formatting specifier has the form: <width>.<precision><type>  f means "fixed point" number  <width> tells us how many spaces to use to display the value. 0 means to use as much space as necessary.  <precision> is the number of decimal places.
  • 73. Python Programming, 2/e 73 String Formatting >>> "Hello {0} {1}, you may have won ${2}" .format("Mr.", "Smith", 10000) 'Hello Mr. Smith, you may have won $10000' >>> 'This int, {0:5}, was placed in a field of width 5'.format(7) 'This int, 7, was placed in a field of width 5' >>> 'This int, {0:10}, was placed in a field of witdh 10'.format(10) 'This int, 10, was placed in a field of witdh 10' >>> 'This float, {0:10.5}, has width 10 and precision 5.'.format(3.1415926) 'This float, 3.1416, has width 10 and precision 5.' >>> 'This float, {0:10.5f}, is fixed at 5 decimal places.'.format(3.1415926) 'This float, 3.14159, has width 0 and precision 5.'
  • 74. Python Programming, 2/e 74 String Formatting  If the width is wider than needed, numeric values are right-justified and strings are left- justified, by default.  You can also specify a justification before the width. >>> "left justification: {0:<5}.format("Hi!") 'left justification: Hi! ' >>> "right justification: {0:>5}.format("Hi!") 'right justification: Hi!' >>> "centered: {0:^5}".format("Hi!") 'centered: Hi! '
  • 75. Python Programming, 2/e 75 Better Change Counter  With what we know now about floating point numbers, we might be uneasy about using them in a money situation.  One way around this problem is to keep trace of money in cents using an int or long int, and convert it into dollars and cents when output.
  • 76. Python Programming, 2/e 76 Better Change Counter  If total is a value in cents (an int), dollars = total//100 cents = total%100  Cents is printed using width 0>2 to right-justify it with leading 0s (if necessary) into a field of width 2.  Thus 5 cents becomes '05'
  • 77. Python Programming, 2/e 77 Better Change Counter # change2.py # A program to calculate the value of some change in dollars. # This version represents the total cash in cents. def main(): print ("Change Countern") print ("Please enter the count of each coin type.") quarters = eval(input("Quarters: ")) dimes = eval(input("Dimes: ")) nickels = eval(input("Nickels: ")) pennies = eval(input("Pennies: ")) total = quarters * 25 + dimes * 10 + nickels * 5 + pennies print ("The total value of your change is ${0}.{1:0>2}" .format(total//100, total%100))
  • 78. Python Programming, 2/e 78 Better Change Counter >>> main() Change Counter Please enter the count of each coin type. Quarters: 0 Dimes: 0 Nickels: 0 Pennies: 1 The total value of your change is $0.01 >>> main() Change Counter Please enter the count of each coin type. Quarters: 12 Dimes: 1 Nickels: 0 Pennies: 4 The total value of your change is $3.14
  • 79. Python Programming, 2/e 79  A file is a sequence of data that is stored in secondary memory (disk drive).  Files can contain any data type, but the easiest to work with are text.  A file usually contains more than one line of text.  Python uses the standard newline character (n) to mark line breaks. Files: Multi-line Strings
  • 80. Python Programming, 2/e 80 Multi-Line Strings  Hello World Goodbye 32  When stored in a file: HellonWorldnnGoodbye 32n
  • 81. Python Programming, 2/e 81 Multi-Line Strings  This is exactly the same thing as embedding n in print statements.  Remember, these special characters only affect things when printed. They don’t do anything during evaluation.
  • 82. Python Programming, 2/e 82 File Processing  The process of opening a file involves associating a file on disk with an object in memory.  We can manipulate the file by manipulating this object.  Read from the file  Write to the file
  • 83. Python Programming, 2/e 83 File Processing  When done with the file, it needs to be closed. Closing the file causes any outstanding operations and other bookkeeping for the file to be completed.  In some cases, not properly closing a file could result in data loss.
  • 84. Python Programming, 2/e 84 File Processing  Reading a file into a word processor  File opened  Contents read into RAM  File closed  Changes to the file are made to the copy stored in memory, not on the disk.
  • 85. Python Programming, 2/e 85 File Processing  Saving a word processing file  The original file on the disk is reopened in a mode that will allow writing (this actually erases the old contents)  File writing operations copy the version of the document in memory to the disk  The file is closed
  • 86. Python Programming, 2/e 86 File Processing  Working with text files in Python  Associate a disk file with a file object using the open function <filevar> = open(<name>, <mode>)  Name is a string with the actual file name on the disk. The mode is either ‘r’ or ‘w’ depending on whether we are reading or writing the file.  Infile = open("numbers.dat", "r")
  • 87. Python Programming, 2/e 87 File Methods  <file>.read() – returns the entire remaining contents of the file as a single (possibly large, multi-line) string  <file>.readline() – returns the next line of the file. This is all text up to and including the next newline character  <file>.readlines() – returns a list of the remaining lines in the file. Each list item is a single line including the newline characters.
  • 88. Python Programming, 2/e 88 File Processing # printfile.py # Prints a file to the screen. def main(): fname = input("Enter filename: ") infile = open(fname,'r') data = infile.read() print(data) main()  First, prompt the user for a file name  Open the file for reading  The file is read as one string and stored in the variable data
  • 89. Python Programming, 2/e 89 File Processing  readline can be used to read the next line from a file, including the trailing newline character  infile = open(someFile, "r") for i in range(5): line = infile.readline() print line[:-1]  This reads the first 5 lines of a file  Slicing is used to strip out the newline characters at the ends of the lines
  • 90. Python Programming, 2/e 90 File Processing  Another way to loop through the contents of a file is to read it in with readlines and then loop through the resulting list.  infile = open(someFile, "r") for line in infile.readlines(): # Line processing here infile.close()
  • 91. Python Programming, 2/e 91 File Processing  Python treats the file itself as a sequence of lines!  Infile = open(someFile, "r") for line in infile: # process the line here infile.close()
  • 92. Python Programming, 2/e 92 File Processing  Opening a file for writing prepares the file to receive data  If you open an existing file for writing, you wipe out the file’s contents. If the named file does not exist, a new one is created.  Outfile = open("mydata.out", "w")  print(<expressions>, file=Outfile)
  • 93. Python Programming, 2/e 93 Example Program: Batch Usernames  Batch mode processing is where program input and output are done through files (the program is not designed to be interactive)  Let’s create usernames for a computer system where the first and last names come from an input file.
  • 94. Python Programming, 2/e 94 Example Program: Batch Usernames # userfile.py # Program to create a file of usernames in batch mode. def main(): print ("This program creates a file of usernames from a") print ("file of names.") # get the file names infileName = input("What file are the names in? ") outfileName = input("What file should the usernames go in? ") # open the files infile = open(infileName, 'r') outfile = open(outfileName, 'w')
  • 95. Python Programming, 2/e 95 Example Program: Batch Usernames # process each line of the input file for line in infile: # get the first and last names from line first, last = line.split() # create a username uname = (first[0]+last[:7]).lower() # write it to the output file print(uname, file=outfile) # close both files infile.close() outfile.close() print("Usernames have been written to", outfileName)
  • 96. Python Programming, 2/e 96 Example Program: Batch Usernames  Things to note:  It’s not unusual for programs to have multiple files open for reading and writing at the same time.  The lower method is used to convert the names into all lower case, in the event the names are mixed upper and lower case.