我的 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]
我想重新排列这些数字,甚至列表压缩在这里被挂起来用于原始文件。怎么做?
答案 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'。
答案 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);
}
}
}
}