将文本文件转换为元组列表

时间:2019-11-19 14:44:26

标签: python string file 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)

但是这并没有达到我想要的效果,它会产生以下输出

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

这只是一个大的长元组,其中包括换行符,我有办法做到这一点,以便data.txt文件中的每一行都是它自己的元组,给我一个元组列表并摆脱掉换行符?

4 个答案:

答案 0 :(得分:3)

如果您将整个文件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]

答案 1 :(得分:2)

您非常亲密。 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"),
  ...
)

答案 2 :(得分:1)

您需要class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); std::string lwnCommand = "lwn"; if (compareData(rxValue, lwnCommand)) { Serial.println("lwn command received"); } } } ,它将输入文件中的每一行读入列表中的单独项目:

readlines()

请注意,这将从每一行的末尾去除所有空格,而不仅仅是换行符。我猜大概没关系。

答案 3 :(得分:0)

这里的问题是如何解析文件。 通常,文件是逗号分隔的值,其中我们有一个字符来分隔字段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))