【问题标题】:Python - open file - readline - list - convert to stringPython - 打开文件 - 读取行 - 列表 - 转换为字符串
【发布时间】:2014-12-10 06:51:05
【问题描述】:

问题/问题详情

我有一个文件 (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','']

打印(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(Key1))

ABCDEFGHIJKLMNOPQRSTUVWXYZ

问题/问题

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

【问题讨论】:

  • 您的 Key1<class 'str'> 而不是 <class 'list'>,这就是为什么 join() 无法按预期工作
  • 听起来您没有充分的理由将原始 python 代码保存在文本文件中。 @Matthias 确实回答了这个问题,但你应该有更好的方法来保存你的 daa

标签: python string list join readline


【解决方案1】:

您必须先将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。

【讨论】:

    【解决方案2】:
    >>> 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 '
    

    【讨论】:

    • 这个建议效果很好。我特别喜欢不需要导入模块来完成任务的事实 - 谢谢
    【解决方案3】:
    infile = open('blah.txt', 'r')
    Key1 = infile.read()
    import re
    y=re.findall(r"([a-zA-Z])",Key1.split("=")[1])
    print "".join(y)
    

    你可以试试这个。

    【讨论】:

      【解决方案4】:

      使用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 并由= 拆分,然后通过索引[-1] 选择字符列表将为您提供携带字符列表的最后一个索引,然后使用ast.literal_eval 获取字符,然后使用@ 987654327@加入所有角色。

      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]))
      

      【讨论】:

        【解决方案5】:

        您的问题是,在您的第一个示例中,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("'", ",")])
        

        【讨论】:

          【解决方案6】:

          重新导入

          字符串 = ""

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

          key = read.readline()

          a = re.compile("[A-Z]")

          对于键中的字符:

              if a.match(char):
          
                      string = string + char
          

          打印字符串

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-15
            • 1970-01-01
            • 2015-04-14
            • 2016-11-09
            • 1970-01-01
            相关资源
            最近更新 更多