簡體   English   中英

將文本文件轉換為元組列表

[英]Convert text file to list of tuples

我無法將文本文件轉換為元組列表。 文本文件將采用以下格式,文件名為 data.txt

埃文斯·李 喜劇演員 25,000
史密斯威爾 演員 50,000
麥克李喜劇演員 30,000

通過使用以下代碼,我設法部分實現了我的目標

load_file = open("data.txt", "r")
data = infile.read()
load_file.close()
data = tuple(item for item in data.split(' ') if item.strip())
print (data)

但是,這並沒有達到我想要的效果,它會產生以下 output

('Evans', 'Lee', 'Comedian', '25,000\nSmith', 'Will', 'Actor', '50,000\nMack', 'Lee', 'Comedian', '30,000')

這只是一個包含換行符的大長元組,有沒有辦法讓data.txt文件中的每一行都是它自己的元組,給我一個元組列表並去掉換行符?

如果你read()整個文件成一個大字符串,你必須先splitlines()

data = [tuple(line.split()) for line in data.splitlines()]

更好:不要將文件作為一個大字符串讀取,而是直接迭代文件中的行:

with open("data.txt") as load_file:
    data = [tuple(line.split()) for line in load_file]

更好的是:使用csv讀取數據; 這也將允許您例如將包含空格的名稱或職位放在引號中:

import csv
with open("data.txt") as load_file:
    reader = csv.reader(load_file, delimiter=" ")
    data = [tuple(row) for row in reader]

你很親密。 infile.read()將整個文件作為字符串提供給您,其中包括換行符 ( \n )。 您可以改用.readlines()

with open('data.txt') as f:
    lines = f.readlines()
    return tuple(tuple(line.split()) for line in lines)

這應該給

(
  ("Evans", "Lee", "Comedian", "25,000"),
  ("Smith", "Will", "Actor", "50,000"),
  ...
)

您需要readlines() ,它將輸入文件中的每一行讀入列表中的單獨項目:

load_file = open("data.txt", "r")
raw = infile.readlines()
data = [line.strip() for line in raw]
load_file.close()
print (data)

請注意,這將刪除每行末尾的所有空格,而不僅僅是換行符。 應該沒問題吧,我猜。

這里的問題是如何解析你的文件。 通常,文件是逗號分隔值,我們有一個字符來分割字段https://pt.wikipedia.org/wiki/Comma-separated_values或者我們有一個文件,其中列具有固定長度https://en .wikipedia.org/wiki/Flat-file_database

在您的情況下,我會使用正則表達式來解析您的行。

嘗試這個:

import re

with open("data.txt", "r") as infile:
    for line in infile:
        groups = re.search("^(.+) (\d.*)", line)
        name = groups.group(1)
        value = groups.group(2)
        print("Name: %s Value:%s" % (name, value))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM