我正在尝试使用Python和ftplib自动从az/os PDS下载一些文本文件.
由于主机文件是EBCDIC,我不能简单地使用FTP.retrbinary().
FTP.retrlines()当与open(file,w).writelines一起用作其回调时,当然不提供EOL.
所以,对于初学者来说,我已经提出了这段"看起来对我好"的代码,但由于我是一个相对的Python noob,有人能提出更好的方法吗?显然,为了保持这个简单的问题,这不是最后的,钟声和口哨的事情.
非常感谢.
#!python.exe
from ftplib import FTP
class xfile (file):
def writelineswitheol(self, sequence):
for s in sequence:
self.write(s+"\r\n")
sess = FTP("zos.server.to.be", "myid", "mypassword")
sess.sendcmd("site sbd=(IBM-1047,ISO8859-1)")
sess.cwd("'FOO.BAR.PDS'")
a = sess.nlst("RTB*")
for i in a:
sess.retrlines("RETR "+i, xfile(i, 'w').writelineswitheol)
sess.quit()
Run Code Online (Sandbox Code Playgroud)
更新:Python 3.0,平台是Windows XP下的MingW.
z/os PDS具有固定的记录结构,而不是依赖行结尾作为记录分隔符.但是,z/os FTP服务器在文本模式下传输时,会提供记录结尾,其后退()剥离.
结账更新:
这是我修改后的解决方案,它将成为持续开发的基础(例如,删除内置密码):
import ftplib
import os
from sys import exc_info
sess = ftplib.FTP("undisclosed.server.com", "userid", "password")
sess.sendcmd("site sbd=(IBM-1047,ISO8859-1)")
for dir in ["ASM", "ASML", "ASMM", "C", "CPP", "DLLA", "DLLC", "DLMC", "GEN", "HDR", "MAC"]: …Run Code Online (Sandbox Code Playgroud) 虽然我已经使用git一段时间了,但我仍然认为自己是n00b,所以请不要对我太苛刻.
我将"公司"主机系统维护为两个不相同的副本.我们称之为测试和生产.大型机没有任何我(或许可能是你们中的任何一个)会认为是版本控制系统的东西,所以我在桌面上使用git来为我提供版本控制.以下是我当前工作流程的主要功能:
桌面和大型机与FTP"同步".最后,无论是在大型机还是PC上编写的所有开发工作都会在git分支机构的PC上完成.
我无法访问任何类型的"现代"部署技术,如Hudson
我有两个主要的分支,称为Test和Prod.由于产品的(继承)结构,Test和Prod实例之间的代码存在许多差异.例如,所有显示面板都需要清楚地识别这是Test还是Prod,但是没有办法在单点配置它.
我通常为特定的开发子项目创建其他分支.
一般开发在Test分支上完成,具有多个提交.准备好后,将这些樱桃挑选到Prod上,标记有更改编号,并在批准后上传.
幸运的是,紧急工作是在Prod分支上完成的,并且是挑选出来的.
偶尔采摘樱桃需要手动合并.
我想改进这个工作流程.目前,我的存储库在两个分支上充满了并行相同的更改.
我想我更喜欢这样做(对于Test - > Prod):
一旦开发准备就绪,在Prod的HEAD创建一个新的分支
将这组开发更改折叠为新分支上的单个更改
将这个新分支合并到Prod.请记住,他们的共同祖先是在使测试与Prod不同的变化之前
它似乎git rebase -i可以完成这项工作,但我必须承认这git rebase是我的脑桥asinorum,不知怎的,我已经设法弄乱了我的树多次.
所以我的问题是:
请在产品的限制范围内建议更好的方法.
如果我的首选方法可行,有人可以建议正确的参数git rebase -i吗?
我目前正在修改一个OpenBSD系统,以便建立自己的防火墙和其他一些东西.
因为这是相当实验性的(我是一个OpenBSD n00b,我已经把我的系统破坏了3到4次),我想知道其他人制作部分或全部文件系统的经验(我特别想到的是/ etc)某些VCS或其他的工作副本.
这是一个好主意吗?
我特别感兴趣的是VCS用户为此做了什么.我正在考虑颠覆,集市和git; 这不是一个共享的存储库,所以我对基本的vcs功能比对distributed-or-not参数更感兴趣.
我也想知道人们发现的想象或实际陷阱.我可以想象保存文件所有权和权限需要仔细考虑!
当然,任何不涉及VCS的替代方法
我在 IO Monad 上有点挣扎。(仍然是 101 的学习者)
我相信我理解将“IO”与纯功能代码分离的绝佳理由,但这似乎使我的代码在使用时钟和环境属性时变得更加复杂。这是一个示例(与时钟相关):
timeZoneSeconds = liftA (60*) $ liftA timeZoneMinutes getCurrentTimeZone
Run Code Online (Sandbox Code Playgroud)
现在,我还有很多其他的东西与 timeZoneSeconds 相关——加、减、比较——在程序的其他地方,而且当 timeZoneSeconds 与其他位交互时,几乎我处理的所有事情都变成了“IO”,因此用liftAs填充我的代码。
所以基本上我看到我所有的纯代码都变成了 IO 脏代码。
在我看过的所有教学材料中,大部分关于 IO monad 的解释都是“读东西然后写东西”的一般类型,没有太多“计算东西”。
有没有推荐的方法来减少这种影响?
我是否应该重新定义我需要在“幕后”使用liftA 的所有操作符?
还是我应该继续下去?
我是 Haskell 的新手,并且非常享受。
作为练习,我编写了一个修改日期和时间的程序。特别是,我正在做涉及分钟、秒和微秒的计算。现在我发现,在调试时,我有很多错误,例如,我将分钟添加到秒而不乘以 60。
为了将调试从运行时转移到编译时,我想到我可以使用“类型同义词加多态函数”来做这样的事情:
module Main where
type SecX = Integer
toMin :: SecX -> MinX
toMin m = div m 60
type MinX = Integer
toSec :: MinX -> SecX
toSec = (60 *)
main :: IO ()
main = do
let x = 20 :: MinX
let y = 20 :: SecX
let z = x + y -- should not compile
print [x,y,z]
Run Code Online (Sandbox Code Playgroud)
但这种方法给我带来了两个问题:
我已成功使用GitHash 模块将分支名称等内容烘焙并将哈希值提交到程序中。
是否有其他类似的模块可以以package.yaml类似的方式从中提取数据?(我猜涉及到 TemplateHaskell?)具体来说,目前我对版本字符串感兴趣,但更广泛的解决方案可能非常有用。
我很想知道它出现在屏幕上的字符串有多长.我们没有使用固定宽度的字体,所以:
"Our mother's tummy makes dummy noises."
Run Code Online (Sandbox Code Playgroud)
远远超过:
"Lilly Leadbetter lives life leisurely."
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉人物有多长时间?我不需要像素完美的精确度,只需要在大致正确的位置椭圆就足够长.CSS溢出无济于事,因为在CSS确定了多长时间之后我无法附加椭圆.
我是 Haskell 新手。作为一项学习练习,我正在尝试将我的一个 Rust 程序移植到 Haskell。在 Rust 中,我使用了令人惊叹的clap包,并且被认为是Options.Applicative一个好看的替代品。下面是一个例子:
import Options.Applicative
import Data.Semigroup ((<>))
data Sample = Sample
{ tod :: Bool
, pmc :: Bool
, tai :: Bool
}
sample :: Parser Sample
sample = Sample
<$> switch
( long "tod"
<> short 'o'
<> help "Convert from TOD" )
<*> switch
( long "pmc"
<> short 'p'
<> help "Convert from PMC" )
<*> switch
( long "tai"
<> short 't'
<> help "Set …Run Code Online (Sandbox Code Playgroud) 最近,在网络的某个地方*,我找到了正则表达式的参考,它描述了贪婪的"第三种方式",不同于贪婪(.*)和懒惰的(.*?)匹配.
我现在尝试搜索SO,谷歌搜索,甚至搜索我的浏览器历史记录,但无济于事.
有谁可以很好地猜测我看到的是什么?
澄清:它提到了什么对我来说是一个新的结构(类似的东西.*+),我相信它甚至有一个名称(类似,但可能不是,"被动地贪婪").
* 我很欣赏"在网上的某个地方"和"在巴别图书馆"或"在Mandelbrot集合中"一样有用,但请尽量帮助