[英]Fetching *list* contents from a text file in Python
我需要幫助,以便從每行存儲為列表的文件中取回列表。 例如,檢查以下lists.txt文件
["1","Andy Allen","Administrator"]
["2","Bob Benny","Moderator"]
["3","Zed Zen","Member"]
我需要以以下方式訪問和顯示內容
SN : 1
Name : Andy Allen
Position : Administrator
SN : 2
Name : Bob Benny
Position : Moderator
SN : 3
Name : Zed Zen
Position : Member
PS:我知道我可以使用分隔符保存它,並使用具有拆分功能的訪問列表元素保存它……但是,當使用特定的分隔符作為文本內容時,似乎導致該函數無法正常運行。
這種格式僅使用雙引號而不是單引號,類似於JSON(JavaScript對象表示法) 。 幸運的是,Python 2.6或更高版本隨附的json
模塊可以解析JSON。 因此,請閱讀每一行,將其解析為JSON(使用json.loads
),然后將其打印出來。 嘗試這樣的事情:
import json
with open("lists.txt", "r") as infp:
rows = [json.loads(line) for line in infp]
for sn, name, position in rows:
print("SN : %s\nName : %s\nPosition : %s\n" % (sn, name, position))
另一種解決方案是導出以制表符或逗號分隔的值格式,並使用Python的csv
模塊讀取它們。 如果(例如)逗號分隔文件中的值包含逗號,請用雙引號( "
)引起來:
2,Bob Benny,"Moderator, Graphic Designer"
並且,如果值包含雙引號字符,則將它們加倍並用雙引號引起來。 例如,下一行的最后一個元素的值為"Fossils" Editor
:
5,Chester from Tilwick,"""Fossils"" Editor"
以分隔格式保存時,電子表格應用程序(例如Excel,LibreOffice Calc或Gnumeric)將為您進行此轉義。 因此, lists.csv
將如下所示:
1,Andy Allen,Administrator
2,Bob Benny,"Moderator, Graphic Designer"
3,Zed Zen,Member
5,Chester from Tilwick,"""Fossils"" Editor"
可以類似地解析:
import csv
with open("lists.csv", "r", newline="") as infp:
# use "excel" for comma-separated or "excel-tab" for tab-separated
reader = csv.reader(infp, "excel")
rows = list(reader)
for sn, name, position in rows:
print("SN : %s\nName : %s\nPosition : %s\n" % (sn, name, position))
(這是針對Python 3的open("lists.txt", "rb")
的csv
模塊的不同之處在於open
應該是二進制的: open("lists.txt", "rb")
。)
如何使用grep抓取[]中的所有內容?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.