如何处理文件中的这个整数数据

时间:2017-01-07 13:31:50

标签: python file

我的 fileA.txt 为:

000001 
0012
1122 
00192
..

该文件约为 25kb ,每行都有一些随机数。

我希望使用 8位固定长度重新排列所有这些数字,如下面的输出:

00000001
00000012
00000112
00000192

我试过了:

f = open('fileA.txt', 'r')
content = f.readlines()
nums = [ int(x.rstrip('\n')) for x in content]
print nums
f.close()

输出:

[1, 12, 1122, 192]

我想重新排列这些数字,甚至列表压缩在这里被挂起来用于原始文件。怎么做?

4 个答案:

答案 0 :(得分:3)

with open('test.txt') as f:
    for line in f:
        f_line = '{:08}'.format(int(line))
        print(f_line)

出:

00000001
00000012
00001122
00000192

列表理解:

with open('test.txt') as f:
    lst = ['{:08}'.format(int(line)) for line in f]

出:

['00000001', '00000012', '00001122', '00000192']

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
  

width是一个十进制整数,用于定义最小字段宽度。如果不   如果指定,则字段宽度将由内容确定。   在宽度字段前加上零('0')字符可启用符号识别功能   数字类型的零填充。这相当于填充字符   对齐类型为'='的'0'。

format string syntax

答案 1 :(得分:2)

您可以使用zfill方法将数字填入“0”。

nums = [ x.rstrip('\n').zfill(8) for x in content]

答案 2 :(得分:2)

使用str.format执行此操作:

>>> with open('nums.txt') as f:
...     for line in f:
...         print('{:0>8}'.format(line.strip()))
... 
00000001
00000012
00001122
00000192

0是填充字符,>指定右对齐,8是填充字符串的宽度。

答案 3 :(得分:2)

如果文件太大,请不要将所有数据加载在一起并进行处理。而是逐个读取行并逐个处理每一行。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const int ROWS = 3;
        const int COLUMNS = 4;
        const int WIDTH = 10;
        const int HEIGHT = 20;
        const int SPACE = 10;
        public Form1()
        {
            InitializeComponent();
            Panel panel = new Panel();
            panel.Width = COLUMNS * (WIDTH + SPACE);
            panel.Height = ROWS * (HEIGHT + SPACE);
            this.Controls.Add(panel);
            for (int rows = 0; rows < ROWS; rows++)
            {
                for (int cols = 0; cols < COLUMNS; cols++)
                {
                    PictureBox newPictureBox = new PictureBox();
                    newPictureBox.Width = WIDTH;
                    newPictureBox.Height = HEIGHT;
                    newPictureBox.Top = rows * (HEIGHT + SPACE);
                    newPictureBox.Left = cols * (WIDTH + SPACE);
                    panel.Controls.Add(newPictureBox);
                    newPictureBox.Paint +=new PaintEventHandler(pictureBox_Paint);

                }
            }
        }
        private void pictureBox_Paint(object sender, PaintEventArgs e) {
            Rectangle ee = new Rectangle(0, 0, WIDTH, HEIGHT);           
            using (Pen pen = new Pen(Color.Red, 2)) {
                e.Graphics.DrawRectangle(pen, ee);
            }
        }
     }
}