代码之家  ›  专栏  ›  技术社区  ›  prosseek

将从文件中读取的字符串与python连接起来?

  •  2
  • prosseek  · 技术社区  · 14 年前

    Emacs的自动填充模式将行拆分,使文档看起来更漂亮。我需要加入从文档中读取的字符串。

    例如,(cr是回车,而不是实际字符)

      - Blah, Blah, and (CR)
        Blah, Blah, Blah, (CR)
        Blah, Blah (CR)
      - A, B, C (CR) 
        Blah, Blah, Blah, (CR)
        Blah, Blah (CR)
    

    使用readlines()函数读取字符串缓冲区数组以生成

    ["Blah, Blah, and Blah, Blah, Blah, Blah, Blah", "A, B, C Blah, Blah, Blah, Blah, Blah"]
    

    我考虑过让循环检查“-”以将所有存储的字符串连接到它之前,但是我希望Python有有效的方法来完成这一点。

    补充:

    基于Kindall的代码,我可以得到我想要的,如下所示。

    lines = ["- We shift our gears toward nextGen effort"," contribute the work with nextGen."]
    out = [(" " if line.startswith(" ") else "\n") + line.strip() for line in lines]
    print out
    res = ''.join(out).split('\n')[1:]
    print res
    

    结果如下。

    ['\n- We shift our gears toward nextGen effort', ' contribute the work with nextGen.']
    ['- We shift our gears toward nextGen effort contribute the work with nextGen.']
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   kindall    14 年前

    在我读到它时,您的问题是撤消硬包装,并将每一组缩进行恢复为一个软包装行。这是一种方法:

    # hard-coded input, could also readlines() from a file
    lines = ["- Blah, Blah, and", 
             "  Blah, Blah, Blah,",
             "  Blah, Blah",
             "- Blah, Blah, and",
             "  Blah, Blah, Blah,",
             "  Blah, Blah"]
    
    out = [(" " if line.startswith(" ") else "\n") + line.strip() for line in lines]
    out = ''.join(out)[1:].split('\n')
    
    print out
    
        2
  •  2
  •   dugres    14 年前

    我不确定你是否只想:

    result = thefile.read()  
    

    或者:

    result = ''.join(line.strip() for line in thefile)  
    

    或者别的什么…

        3
  •  0
  •   inspectorG4dget    14 年前

    使用 file.readlines() . 它返回一个字符串列表,每个字符串都是文件的一行:

    readlines(...)
        readlines([size]) -> list of strings, each a line from the file.
    
        Call readline() repeatedly and return a list of the lines so read.
        The optional size argument, if given, is an approximate bound on the
        total number of bytes in the lines returned.
    

    正如注释中指出的,edit:readlines()不是最好的方法。无视那个建议,用下面的建议代替

    如果要使用Emacs提供的输出作为python函数的输入,那么我将给出(如果Emacs输出是一个长字符串):

    [s.replace("\n", "") for s in emacsOutput.split('-')]
    

    希望这有帮助