文件操做做業

# 1,有以下文件,a1.txt,裏面的內容爲:
#
# 老男孩是最好的培訓機構,
# 全心全意爲學生服務,
# 只爲學生將來,不爲牟利。
# 我說的都是真的。哈哈
#
# 分別完成如下的功能:
# a,將原文件所有讀出來並打印。
f = open('a1.txt', mode='r', encoding='utf-8')
print(f.read())
f.close()
# b,在原文件後面追加一行內容:信不信由你,反正我信了。
f = open('a1.txt', mode='a', encoding='utf-8')
f.write('\n信不信由你,反正我信了。')
f.flush()
f.close()
# c,將原文件所有讀出來,並在後面添加一行內容:信不信由你,反正我信了。
f = open('a1.txt', mode='r+', encoding='utf-8')
print(f.read())
f.write('\n信不信由你,反正我信了。')
f.flush()
f.close()
# d,將原文件所有清空,換成下面的內容:
#
# 天天堅持一點,
# 天天努力一點,
# 天天多思考一點,
# 慢慢你會發現,
# 你的進步愈來愈大。
f = open('a1.txt', mode='w', encoding='utf-8')
# 注意三引號裏面的內容第一行不要換行到下一行,不然文件裏面會顯示一行空行
content = """天天堅持一點, 
天天努力一點,
天天多思考一點,
慢慢你會發現,
你的進步愈來愈大
"""
f.write(content)
f.flush()
f.close()
# e,將原文件內容所有讀取出來,並在‘我說的都是真的。哈哈’這一行的前面加一行,‘大家就信吧~’而後將更改以後的新內容,寫入到一個新文件:a1.txt。
import os

# 方法一:使用+拼接字符串
with open("a1.txt", mode="r", encoding="utf-8") as f, \
     open("a1_副本.txt", mode="w", encoding="utf-8") as f2:
    for line in f:  # 1.遍歷文件
        line = line.strip() # 這個要去空格,讀取出來的每一行的內容裏面是不會包含換行符\n的,只會在控制檯打印的時候直接間隔一個空行
        if line == '我說的都是真的。哈哈': # 若是line 沒有去空格的話,也不會有讀出來的某一行等於'我說的都是真的。哈哈\n'
            # line = '大家就信吧~\n'.join([line]) # join是沒辦法使用的,join是迭代拼接,不是簡單的拼接
            line = '大家就信吧~\n' + line # 2.拿到修改好的內容
            print(line)

        f2.write(line+'\n')  # 3. 把修改好的內容寫入一個新文件
# 4.刪除原來文件
os.remove("a1.txt")
# 5.重命名副本爲原來的文件名
os.rename("a1_副本.txt", "a1.txt")

# 方法二:使用replace替換
# 就不用判斷讀到哪一行了,由於replace自身有個尋找的功能,符合第一個參數才替換,不符合不替換
with open("a1.txt", mode="r+", encoding="utf-8") as r,\
     open("a1_1.txt", mode="w", encoding="utf-8")as r1:
    for line in r:
        r1.write(line.replace("我說的都是真的。哈哈", "大家就信吧~\n我說的都是真的。哈哈"))
os.remove("a1.txt")
os.rename("a1_1.txt", "a1.txt")


# 方法三:老師講解的
with open("a1.txt", mode="r+", encoding="utf-8") as f1,\
     open("a1_1.txt", mode="w", encoding="utf-8")as f2:
    for line in f1:
        if line.strip() == '我說的都是真的。哈哈':  # 讀到這一行以前先寫入一行你須要的內容到f2文件中
            f2.write("大家就信吧~\n")
        f2.write(line)
os.remove("a1.txt")
os.rename("a1_1.txt", "a1.txt")

# 2,有以下文件,t1.txt,裏面的內容爲:
#
# 葫蘆娃,葫蘆娃,
# 一根藤上七個瓜
# 風吹雨打,都不怕,
# 啦啦啦啦。
# 我能夠算命,並且算的特別準:
# 上面的內容你確定是內心默唱出來的,對不對?哈哈
#
# 分別完成下面的功能:
# a,以r+的模式打開原文件,判斷原文件是否可讀,是否可寫。

# 以前不知道的
with open('t1.txt', mode='r+', encoding='utf-8') as f:
    print(f.readable())
    print(f.writable())

"""
# 以a的模式打開文件是沒辦法經過seek移動光標的,只能追加到文件的末尾

with open('t1.txt', mode='a', encoding='utf-8') as f:
    f.seek(0)
    f.write('456789\n') # 這裏的內容仍是追加到文件的末尾的
"""
# b,以r的模式打開原文件,利用for循環遍歷文件句柄。
with open('t1.txt', mode='r', encoding='utf-8') as f:
    for line in f:
        print(line)

# c,以r的模式打開原文件,以readlines()方法讀取出來,並循環遍歷        readlines(),並分析b,與c 有什麼區別?深刻理解文件句柄與            readlines()結果的區別。
with open('t1.txt', mode='r', encoding='utf-8') as f:
    # print(f.readlines())
    for line in f.readlines():
        print(line)

# d,以r模式讀取‘葫蘆娃’前三個字符。
with open('t1.txt', mode='r', encoding='utf-8') as f:
    print(f.read(3))
# e,以r模式讀取第一行內容,並去除此行先後的空格,製表符,換行符。
with open('t1.txt', mode='r', encoding='utf-8') as f:
    print(f.readline().strip())

# f,以r模式打開文件,從‘風吹雨打.....’開始讀取,一直讀到最後。
with open('t1.txt', mode='r', encoding='utf-8') as f:
    for line in f.readlines()[2:]:
        print(line.strip())
# 老師講解的
with open('t1.txt', mode='r', encoding='utf-8') as f:
    f.readline()  # 前兩行讀取可是不打印
    f.readline()
    print(f.read())
# g,以a+模式打開文件,先追加一行:‘老男孩教育’而後在從最開始將        原內容所有讀取出來。
with open('t1.txt', mode='a+', encoding='utf-8') as f:
    f.write('\n老男孩教育')
    f.seek(0)
    print(f.read())
# h,截斷原文件,留下內容:‘葫蘆娃’
with open('t1.txt', mode='r+', encoding='utf-8') as f:
    f.truncate(9)
    print(f.read())


# 3,文件a.txt內容:每一行內容分別爲商品名字,價錢,個數。
#
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
#
# 經過代碼,將其構建成這種數據類型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 並計算出總價錢。
#我寫的
lst = []
sum = 0
with open('a3.txt', mode='r', encoding='utf-8') as f:
    for line in f:
        dic = {}
        a, b, c = line.strip().split()  # split()括號內不傳入參數,默認以一切的空白做爲切割符
        sum += int(b) * int(c)
        dic['name'] = a
        dic['price'] = b
        dic['amount'] = c
        lst.append(dic)

print(lst, sum)

#老師寫的
lst = []
sum = 0
with open('a3.txt', mode='r', encoding='utf-8') as f:
    for line in f:
        a, b, c = line.strip().split()  # split()括號內不傳入參數,默認就是以空白(一切相連的空白當成一個總體去)做爲切割符
        sum += int(b) * int(c)
        dic = {'name':a, 'price':int(b), 'amout':int(c)}
        lst.append(dic)

print(lst, sum)


#
# 4,有以下文件:
#
# alex是老男孩python發起人,建立人。
# alex實際上是人妖。
# 誰說alex是sb?
# 大家真逗,alex再牛逼,也掩飾不住資深屌絲的氣質。
#
# 將文件中全部的alex都替換成大寫的SB(文件的改的操做)。
#
import os
with open("alex.txt", mode="r", encoding="utf-8")as f,\
    open("alex_1.txt", mode="w", encoding="utf-8")as f1:
    for line in f:
        if "alex" in line:
            line = line.replace("alex", "SB")
        f1.write(line)
os.remove("alex.txt")
os.rename("alex_1.txt", "alex.txt")


# 5,文件a1.txt內容(升級題)
#
# name:apple price:10 amount:3 year:2012
# name:tesla price:100000 amount:1 year:2013
# .......
#
# 經過代碼,將其構建成這種數據類型:
# [{'name':'apple','price':10,'amount':3},
# {'name':'tesla','price':1000000,'amount':1}......]
# 並計算出總價錢。
lst = []
sum = 0
with open('a5.txt', mode='r', encoding='utf-8') as f:
    for line in f:
        dic = {}
        for el in line.strip().split():  # 獲得每一行切割成的列表
            k, v = el.split(':')  # 獲得每一行切割成的列表 中的每一個元素切割成的列表的解包
            if k != 'year':
                if v.isdigit():
                    dic[k] = int(v)
                else:
                    dic[k] = v
        lst.append(dic)
        sum += dic['price'] * dic['amount']


print(lst)
print(sum)
#
#
# 6,文件a1.txt內容(升級題)
#
# 序號     部門      人數      平均年齡      備註
# 1       python    30         26         單身狗
# 2       Linux     26         30         沒對象
# 3       運營部     20         24         女生多
# .......
#
# 經過代碼,將其構建成這種數據類型:
# [{'序號':'1','部門':Python,'人數':30,'平均年齡':26,'備註':'單身狗'},
# ......]

#不知道split()不傳入參數的用法寫的
lst = []
title = []

with open('a6.txt', mode='r', encoding='utf-8') as f:
    title_ = f.readline().strip().split(' ')  # 字典的key的列表
    for el in title_:
        if len(el) != 0:
            title.append(el)
    # print(title)
    for line in f:  # 接着上面的readline讀,因此是從第一行的結尾接着遍歷文件
        dic = {}  # 每一行都須要一個空字典去裝該行的數據
        data = []
        data_ = line.strip().split(' ')  # 字典的value的列表
        for da in data_:
            if len(da) != 0:
                data.append(da)
        # print(data)
        for i in range(len(title)):  # 一個完整的for循環將一行的數據添加到字典中
            dic[title[i]] = data[i]
        lst.append(dic)
print(lst)

#老師講解的,利用split()不傳入參數默認以空白做爲切割符的特性
# 打開文件
f = open("t6", mode="r", encoding="utf-8")
# 處理標題 ['序號', '部門', '人數', '平均年齡', '備註']
title = f.readline().strip().split()
print(title)
# 準備存放結果的列表
lst = []

# 獲取到數據
for line in f: # line :  1       python    30         26         單身狗
    data = line.strip().split() # 切割處理 [1,python,30,26,單身狗]
    dic = {}
    # 循環標題的索引. 標題的索引和數據的索引是一一對應的
    for i in range(len(title)):
        dic[title[i]] = data[i] # 把數據獲取到, 放在字典中
    lst.append(dic) # 把字典裝列表
print(lst)

# 明日默寫:
# 就是第4題的代碼(課上講過)。
import os
with open("alex.txt",mode="r",encoding="utf-8")as f,\
    open("alex_1.txt",mode="w",encoding="utf-8")as f1:
    for line in f:
        line = line.replace("alex","SB")
        f1.write(line)
os.remove("alex.txt")
os.rename("alex_1.txt","alex.txt")

 

# a,將原文件所有讀出來並打印。
f = open("a1.txt", mode="r", encoding="utf-8")
print(f.read())
f.close()

# b,在原文件後面追加一行內容:信不信由你,反正我信了。
f = open("a1.txt", mode="a", encoding="utf-8")
f.write("信不信由你,反正我信了")
f.close()

# c,將原文件所有讀出來,並在後面添加一行內容:信不信由你,反正我信了。
f = open("a1.txt", mode="r+", encoding="utf-8")
print(f.read())
f.write("信不信由你,反正我信了")
f.close()


# d,將原文件所有清空,換成下面的內容:
# 天天堅持一點,
# 天天努力一點,
# 天天多思考一點,
# 慢慢你會發現,
# 你的進步愈來愈大。

f = open("a1.txt", mode="w", encoding="utf-8")
f.write("天天堅持一點,\n")
f.write("天天努力一點,\n")
f.write("天天多思考一點,\n")
f.write("慢慢你會發現,\n")
f.write("你的進步愈來愈大。\n")
f.flush()
f.close()

# e,將原文件內容所有讀取出來,
# 並在‘我說的都是真的。哈哈’這一行的前面加一行,‘大家就信吧~’
# 而後將更改以後的新內容,
# 寫入到一個新文件:a1.txt。
import os

with open("a1.txt", mode="r", encoding="utf-8") as f1, \
        open("a1.txt_副本", mode="w", encoding="utf-8") as f2:
    for line in f1:
        if line.strip() == "我說的都是真的。哈哈":
            f2.write("大家就信吧~\n")
        f2.write(line)

os.remove("a1.txt")
os.rename("a1.txt_副本", "a1.txt")



# a,以r+的模式打開原文件,判斷原文件是否可讀,是否可寫。
f = open("t1.txt", mode="w", encoding="utf-8")
print(f.readable())
print(f.writable())
# b,以r的模式打開原文件,利用for循環遍歷文件句柄。
f = open("t1.txt", mode="r", encoding="utf-8")
for line in f:
    print(line)
# c,以r的模式打開原文件,以readlines()方法讀取出來,並循環遍歷
#  readlines(),並分析b,與c 有什麼區別?深刻理解文件句柄與
# readlines()結果的區別。
f = open("t1.txt", mode="r", encoding="utf-8")
for line in f.readlines():
    print(line)
# d,以r模式讀取‘葫蘆娃’前三個字符。
f = open("t1.txt", mode="r", encoding="utf-8")
print(f.read(3))
# e,以r模式讀取第一行內容,並去除此行先後的空格,製表符,換行符。
f = open("t1.txt", mode="r", encoding="utf-8")
print(f.readline().strip())
# f,以r模式打開文件,從‘風吹雨打.....’開始讀取,一直讀到最後。
f = open("t1.txt", mode="r", encoding="utf-8")
f.readline()
f.readline()
content = f.read()
print(content)

# g,以a+模式打開文件,先追加一行:‘老男孩教育’而後在從最開始將
#         原內容所有讀取出來。
f = open("t1.txt", mode="a+", encoding="utf-8")
f.write('\n老男孩教育')
f.seek(0)
print(f.read())

# h,截斷原文件,留下內容:‘葫蘆娃’
f = open("t1.txt", mode="r+", encoding="utf-8")
f.truncate(9)


# 3,文件t3內容:每一行內容分別爲商品名字,價錢,個數。

f = open('t3', mode="r", encoding="utf-8")
lst = []
for line in f:
    a, b, c = line.split() # 默認就是按照空白切割
    dic = {"name":a, "price":int(b), "amout":int(c)}
    lst.append(dic)
print(lst)

# 4. 把文件中的alex替換成sb
import os
with open("t4", mode="r", encoding="utf-8") as f1, \
        open("t4_副本", mode="w", encoding="utf-8") as f2:
    for line in f1:
        line = line.replace("alex", "sb")
        f2.write(line)
os.remove("t4")
os.rename("t4_副本", "t4")


# 6.
# 打開文件
f = open("t6", mode="r", encoding="utf-8")
# 處理標題 ['序號', '部門', '人數', '平均年齡', '備註']
title = f.readline().strip().split()
print(title)
# 準備存放結果的列表
lst = []

# 獲取到數據
for line in f: # line :  1       python    30         26         單身狗
    data = line.strip().split() # 切割處理 [1,python,30,26,單身狗]
    dic = {}
    # 循環標題的索引. 標題的索引和數據的索引是一一對應的
    for i in range(len(title)):
        dic[title[i]] = data[i] # 把數據獲取到, 放在字典中
    lst.append(dic) # 把字典裝列表
print(lst)


# 5.
f = open("t5", mode="r", encoding="utf-8")
result = []
for line in f: # name:apple price:10 amount:3 year:2012
    dic = {} # 每行是一個字典
    lst = line.split()
    for el in lst: # name:apple
        k, v = el.split(":")
        if k != 'year':
            dic[k] = v
    result.append(dic)
print(result)

# 計算總價
# [{'name': 'apple', 'price': '10', 'amount': '3'}, {'name': 'tesla', 'price': '100000', 'amount': '1'}]
sum = 0
for d in result:
    sum += int(d['price']) * int(d['amount'])
print(sum)
View Code
相關文章
相關標籤/搜索