繁体   English   中英

Python - 打开文件 - readline - list - 转换为字符串

[英]Python - open file - readline - list - convert to string

问题/问题详情

我有一个文件(blah.txt),其内容(列表)如下所示:

Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L' 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',” Y','Z','']

在一个简单的python文件(称为CAT.py)中,我执行以下命令:

infile = open('blah.txt', 'r')
Key1 = infile.readline()
infile.close()
Key1 = Key1.rstrip('\n')
print(Key1)

Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L' 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',” Y','Z','']

print(''.join(Key1))

Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L' 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',” Y','Z',''] <----这就是我不想要的东西

然而…。

如果在一个单独的简单python文件(称为DOG.py)中,我在列表上执行以下命令:

Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L' 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',” Y','Z','']

打印(密钥1)

['A','B','C','D','E','F','G','H','I','J','K','L',' M','N','O','P','Q','R','S','T','U','V','W','X','Y' ,'Z','']

打印( ''。加入(密钥1))

ABCDEFGHIJKLMNOPQRSTUVWXYZ <----这就是我想要的东西

问题/问题

我最终希望输出看起来像“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,但对于我的生活,我无法弄清楚如何读取文件的列表,然后将该列表转换为单个字符串。 有人能告诉我我哪里出错了,并告诉我一些可以解决我的问题的代码吗?

您必须先将string转换为list然后才能应用join

首先我们使用partition来获取=之后的部分。 然后ast.literal_eval将创建一个字符串列表。

import ast
line = "Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ']"
data = line.partition('=')[2].strip()
elements = ast.literal_eval(data)
print(''.join(elements))

附加:你可以使用with在打开文件的情况下。 如果你这样做,Python会为你关闭文件。

with open('blah.txt', 'r') as infile:
    line = infile.readline()

正如jamylak所指出的:如果您控制文件,请不要存储这样的数据。 你可以看到它并不容易处理。 您可以将数据存储和读取为JSON。

infile = open('blah.txt', 'r')
Key1 = infile.read()
import re
y=re.findall(r"([a-zA-Z])",Key1.split("=")[1])
print "".join(y)

你可以试试这个。

>>> infile = open('blah.txt', 'r')
>>> key1 = infile.readline()
>>> infile.close()
>>> key1 = "Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ']"
>>> key1 = key1[key1.index('['):key1.index(']')+1]
>>> key1
"['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ']"
>>> ''.join(eval(key1))
'ABCDEFGHIJKLMNOPQRSTUVWXYZ '

使用ast.literal_eval

import ast
with open('blah.txt') as f:
    for line in f:   # line = 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '.
        print ''.join(ast.literal_eval(line))

使用str.split和split by =然后通过索引选择字符列表[-1]将给出最后一个带有字符列表的索引,然后使用ast.literal_eval获取字符,然后使用str.join加入所有人物。

import ast
with open('blah.txt') as f:
    for line in f:  # if line = key1 = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ']
        print ''.join(ast.literal_eval(line.split(' = ')[-1]))

你的问题是,在你的第一个例子中,key1是一个字符串,而不是一个列表。 以下应该为您提供所需的输出:

str_input = "Key1 = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ']"

remove_unnecessary_data = str_input[str_input.find('[')+1: str_input.find(']')]

answer = ''.join([char for char in remove_unnecessary_data  if char not in("'", ",")])

进口重新

string =“”

read = open('blah.txt','r')

key = read.readline()

a = re.compile(“[AZ]”)

对于密钥中的字符:

    if a.match(char):

            string = string + char

打印字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM