将字典的值以3列写入文件

时间:2018-09-25 02:55:33

标签: python python-3.x

我想将3列中的字典值写入python文件中。值的顺序无关紧要。

我有这本字典dict_cols

dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}

以下代码将所有值写入文本文件:

with open("output.txt", "w") as f:
    for k, v in dict_cols.items():
        f.write(v + ", ")

output.txt将具有以下内容:

c1, c2, c3, c4, c5, c6, 

我该如何修改代码以将以下内容打印到第3列中的output.txt,如下所示?

c1, c2, c3,
c4, c5, c6

我正在使用python v3.6

4 个答案:

答案 0 :(得分:2)

对代码的主要修改将是在逗号和换行符之间替换分隔符。这是通过枚举跟踪序列中位置的一种方法:

char* readBinaryFile(const char* fileName) {
    ifstream file(fileName, ios::binary || ios::ate);

    // get the size of file
    streampos beg, end;
    beg = file.tellg();
    file.seekg(0,ios::end);
    end = file.tellg();
    long size = end - beg;

    char* buffer = new char[size];

    // now read the file into buffer
    file.seekg(0, ios::beg);
    file.read(buffer, size);
    file.close();

    return buffer;
}

答案 1 :(得分:2)

这与@Mad Physicist的答案类似,但是它不使用列表来保存行尾(节省内存),它仅遍历字典的值而不是(未使用的)键和值。

dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}

col = 1
with open('tmp.txt', 'w') as fp:
    for i, v in enumerate(dict_cols.values()):
        sep = '' if i == len(dict_cols) - 1 else ','
        fp.write(v + sep)
        if col == 3:
            fp.write('\n')
            col = 0
        col += 1

答案 2 :(得分:1)

这是我的方式,如果我必须说实话,我会选择@Ben的答案,因为它的代码更少,效率更高且易于阅读,但这就是它的工作方式。首先,我将列表的不同值分离到它们所在的行中,然后获取每个值并打印出来。

file = "test.txt"
dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}
dict_values = dict_cols.values()
with open (file,"w") as f:
    count = -1
    sep_values = []
    for ind,value in enumerate(dict_values):
        if ind%3 ==0:
            count+=1
            sep_values.append("")
        if ind != len(dict_values)-1:
            end = ", "
        else:
            end = ""
        sep_values[count] += value+end
    for value in sep_values:
        f.write(value+"\n")

答案 3 :(得分:1)

这很不雅致,但效果很好

dict_cols = {'1': 'c1', '2': 'c2', '3': 'c3', '4': 'c4', '5': 'c5', '6': 'c6'}
line_sep = ',\n'

with open("output.txt", "w") as f:
    f.write(', '.join([v for v in dict_cols.values()][:3]) + line_sep + 
            ', '.join([v for v in dict_cols.values()][3:]))