我想设置在文本文件中写入的numpy数组的每个元素的字符长度
我目前得到的输出是:
99941 1 56765 56767 51785 51793 0 0 0 0
101150 1 59006 59005 51782 51783 0 0 0 0
正如您在上面的情况中看到的那样,随着数字的增加,列被移位。
但在理想情况下,输出应如下所示:
99941 1 56765 56767 51785 51793 0 0 0 0
101150 1 59006 59005 51782 51783 0 0 0 0
有什么方法可以修复numpy数组的每个元素的字符长度,以便在考虑元素字符长度并保持列格式固定后从右到左写入元素?
这是我正在使用的代码片段。
def calculate(self, ElementNum1, ElementNum2):
Angle = Function().Transformation(ElementNum1, ElementNum2)
ElementInfo = Shell().getElement(ElementNum2)
Card1 = np.array([0,0,0,0,0,0,0,0,0,0])
Card1.itemset(0,(ElementInfo[0]))
Card1.itemset(1,(ElementInfo[1]))
Card1.itemset(2,(ElementInfo[2]))
Card1.itemset(3,(ElementInfo[3]))
Card1.itemset(4,(ElementInfo[4]))
Card1.itemset(5,(ElementInfo[5]))
return str(Card1)
def AngleSolution1(self,ElementPair):
Pair = np.genfromtxt(ElementPair, dtype=int, comments='None', delimiter=', ')
row = int(Pair.size/2)
p = mp.Pool(processes=4)
result = [p.apply_async(AngleCalculateFunction().calculate, args=(Pair[i][0], Pair[i][1])) for i in range(0, int(row/4))]
Result = open('Angles.csv', "a")
Result.write('\n'.join(map(str, ((((p.get()).replace('[','')).replace(']','')) for p in result))))
Result.write('\n')
Result.close()
p.close()
由于我正在使用多处理错误,因此存在某些性能问题,但它超出了本讨论的范围。
答案 0 :(得分:1)
您可以这样做:
99941 1 56765 56767 51785 51793 0 0 0 0
101150 1 59006 59005 51782 51783 0 0 0 0
那应该给你这样的输出:
%-10s
/*
* listdir.c - Leer archivo de un directorio
*/
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
void err_quit(char *msg);
int main(int argc, char *argv[])
{
DIR *dir;
struct dirent *mydirent;
int i = 1;
if(argc != 2) {
//puts("USO: listdir {pathname}");
//exit(EXIT_FAILURE);
argv[1]="/home/maudev";
}
if((dir = opendir(argv[1])) == NULL)
{
err_quit("opendir");
}
printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);
printf("<TITLE>CARPETAS</TITLE>\n");
printf("<H3>CARPETAS</H3>\n");
printf("<select>\n");
while((mydirent = readdir(dir)) != NULL)
{
printf("\n<option value='%s'>%s",mydirent->d_name,mydirent->d_name);
printf("</option>\n");
}
printf("</select>\n");
closedir(dir);
exit(EXIT_SUCCESS);
}
void err_quit(char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
部分指定该列的宽度应为10个字符,并用空格填充剩余的字符。一点警告:这会在每一行的末尾打印出许多额外的空格。
答案 1 :(得分:1)
np.savetxt
一次格式化一行,并将其写入打开的文件。
In [536]: x
Out[536]:
array([[ 99941, 1, 56765, 56767, 51785, 51793, 0, 0,
0, 0],
[101150, 1, 59006, 59005, 51782, 51783, 0, 0,
0, 0]])
实际上,它正在进行(使用print而不是用于说明目的的文件写入):
In [537]: fmt=' '.join(['%8d']*x.shape[1])
In [538]: for row in x:
print(fmt%tuple(row))
.....:
99941 1 56765 56767 51785 51793 0 0 0 0
101150 1 59006 59005 51782 51783 0 0 0 0
或者,如果您想收集一个字符串中的所有行,您可以将它们附加到列表中:
In [544]: astr = []
In [545]: for row in x:
astr.append(fmt%tuple(row))
.....:
In [546]: print('\n'.join(astr))
99941 1 56765 56767 51785 51793 0 0 0 0
101150 1 59006 59005 51782 51783 0 0 0 0
Python对象显示(str(...)
)通常会执行此类行追加和连接。