如何用Python编写新行到文件?

时间:2014-04-01 18:57:22

标签: python file python-3.x io

我有一个函数,其中conversion是一个列表,filename是输入文件的名称。我想在一行中写入5个字符然后添加一个新行并在该行中添加5个字符并添加一个新行,直到从列表转换到文件文件名无法写入。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:0)

将字符串列表转换为一个大字符串,然后一次循环该字符串五个字符并插入" \ n"在循环的每次迭代之后。然后将其写入文件。这是我的意思的基本例子,可能需要一些调整,但它会给你一个想法:

# concatenate all the strings for simplicity
big_string = ""
for single_string in conversion:
    big_string += single_string

# loop through using 5 characters at a time
string_with_newlines = ""
done = False
while not done:
    next_five_chars = big_string[:5]
    big_string = big_string[5:]
    if next_five_chars:
        string_with_newlines += next_five_chars + "\n"
    else:
        done = True

# write it all to file
with open(filename, "w") as your_file:
    your_file.write(string_with_newlines)

答案 1 :(得分:0)

从我认为我对您的问题的理解,您可能需要看起来像这样的代码:

import os
def write_data_file(your_collection, data_file_path):
    """Writes data file from memory to previously specified path."""
    the_string = ''
    for row in your_collection:
        for i, c in enumerate(row):
            if i % 5 < 4:
                the_string += c
            else:
                the_string += os.linesep + c
    with open(data_file_path, 'w') as df:
        df.write(the_string)

my_collection = [
    "This is more than five characters",
    "This is definately more than five characters",
    "NOT",
    "NADA"
]
write_data_file(my_collection, '/your/file/path.txt')

除此之外,您可能需要澄清您的要求。此代码段循环遍历集合(如列表),然后循环遍历集合中该行所包含的假定字符串。只要达到5个字符的限制,它就会添加新行。

答案 2 :(得分:0)

def foo(conversion, filename):
    with open(filename, "a") as f:
        line = ""
        for s in conversion:
            for c in s:
                if len(line) < 5:
                    line += c
                else:
                    f.write(line + "\n")
                    line = c
        f.write(line)

答案 3 :(得分:0)

我创建了一个分组列表的功能:

import itertools
def group(iterable, n):
    gen = (char for substr in iterable for char in substr)
    while True:
        part = ''.join(itertools.islice(gen, 0, n))
        if not part:
            break
        yield part

演示:

>>> l = ['DBTsiQoECGPPo', 'd', 'aDAuehlM', 'FbUnSuMLuEbHe', 'jRvARVZMn', 'SbGCi'
, 'jhI', 'Rpbd', 'uspffRvPiAmbQEoZDFAG', 'RIbHAcbREdqpMDX', 'bqVMrN', 'FtU', 'nu
fWcfjfmAaUtYtwNUBc', 'oZvk', 'EaytqdRkICuxqbPaPulCZlD', 'dVrZdidLeakPT', 'qttRfH
eJJMOlJRMKBM', 'SAiBrdPblHtRGpjpZKuFLGza', 'RxrLgclVavoCmPkhR', 'YuulTYaNTLghUkK
riOicMuUD']
>>> list(group(l, 5))
['DBTsi', 'QoECG', 'PPoda', 'DAueh', 'lMFbU', 'nSuML', 'uEbHe', 'jRvAR', 'VZMnS'
, 'bGCij', 'hIRpb', 'duspf', 'fRvPi', 'AmbQE', 'oZDFA', 'GRIbH', 'AcbRE', 'dqpMD
', 'XbqVM', 'rNFtU', 'nufWc', 'fjfmA', 'aUtYt', 'wNUBc', 'oZvkE', 'aytqd', 'RkIC
u', 'xqbPa', 'PulCZ', 'lDdVr', 'ZdidL', 'eakPT', 'qttRf', 'HeJJM', 'OlJRM', 'KBM
SA', 'iBrdP', 'blHtR', 'GpjpZ', 'KuFLG', 'zaRxr', 'LgclV', 'avoCm', 'PkhRY', 'uu
lTY', 'aNTLg', 'hUkKr', 'iOicM', 'uUD']
>>> '\n'.join(group(l, 5))
'DBTsi\nQoECG\nPPoda\nDAueh\nlMFbU\nnSuML\nuEbHe\njRvAR\nVZMnS\nbGCij\nhIRpb\ndu
spf\nfRvPi\nAmbQE\noZDFA\nGRIbH\nAcbRE\ndqpMD\nXbqVM\nrNFtU\nnufWc\nfjfmA\naUtYt
\nwNUBc\noZvkE\naytqd\nRkICu\nxqbPa\nPulCZ\nlDdVr\nZdidL\neakPT\nqttRf\nHeJJM\nO
lJRM\nKBMSA\niBrdP\nblHtR\nGpjpZ\nKuFLG\nzaRxr\nLgclV\navoCm\nPkhRY\nuulTY\naNTL
g\nhUkKr\niOicM\nuUD'

'\n'.join(group(l, 5))的结果写入文件。

答案 4 :(得分:0)

l = ["one", "two", "three", "four", "five"]


def write(conversion, filename):
    string = "".join(conversion)
    f = open(filename, "a")
    for i in range(5, len(string) + 5, 5):
        f.write(string[i-5:i])
        f.write("\n")

if __name__ == '__main__':
    write(l, "test.txt")

这会创建一个名为&#34; test.txt&#34;的文件。内容:

onetw
othre
efour
onetw
othre
efour
five